From 71d3227e9f7458cc2b5aa4fa905bb37cae2ef652 Mon Sep 17 00:00:00 2001 From: jolov Date: Wed, 29 Jul 2026 15:32:41 -0700 Subject: [PATCH 1/3] feat(http-client-csharp): add streaming client results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e02ee7d0-8d27-46f8-a856-222d6a938ecd --- .../emitter/src/lib/operation-converter.ts | 111 +- .../emitter/src/type/input-type.ts | 12 + .../test/Unit/operation-converter.test.ts | 89 + .../emitter/test/Unit/utils/test-util.ts | 12 + .../eng/scripts/Spector-Helper.psm1 | 1 - .../JsonLinesBinaryContentDefinition.cs | 324 +++ .../Providers/ScmMethodProviderCollection.cs | 122 +- .../src/ScmOutputLibrary.cs | 1 + .../src/ScmTypeFactory.cs | 3 + .../ScmMethodProviderCollectionTests.cs | 230 ++ .../src/InputTypes/InputStreamingType.cs | 38 + .../InputStreamingTypeConverter.cs | 77 + .../Serialization/InputTypeConverter.cs | 2 + .../Serialization/TypeSpecSerialization.cs | 1 + .../src/Primitives/CSharpType.cs | 2 +- .../src/Primitives/NewProjectScaffolding.cs | 2 +- .../src/Properties/launchSettings.json | 10 + .../src/TypeFactory.cs | 6 + .../ExternalTypeReferenceResolver.cs | 124 +- .../test/common/InputFactory.cs | 5 +- .../generator/Packages.Data.props | 6 +- .../Sample-TypeSpec/src/SampleTypeSpec.csproj | 2 +- .../Http/Streaming/Jsonl/JsonlTests.cs | 44 + .../Http/Streaming/Sse/SseTests.cs | 87 + .../Infrastructure/TestServerBase.cs | 7 +- .../TestProjects.Spector.Tests.csproj | 2 + .../api-key/src/Authentication.ApiKey.csproj | 2 +- .../src/Authentication.Http.Custom.csproj | 2 +- .../oauth2/src/Authentication.OAuth2.csproj | 2 +- .../union/src/Authentication.Union.csproj | 2 +- .../src/Client.Structure.Service.csproj | 2 +- .../Client.Structure.Service.Default.csproj | 2 +- ...ient.Structure.Service.Multi.Client.csproj | 2 +- ...Structure.Service.Renamed.Operation.csproj | 2 +- ...Structure.Service.TwoOperationGroup.csproj | 2 +- .../documentation/src/Documentation.csproj | 2 +- .../http/encode/array/src/Encode.Array.csproj | 2 +- .../http/encode/bytes/src/Encode.Bytes.csproj | 2 +- .../datetime/src/Encode.Datetime.csproj | 2 +- .../duration/src/Encode.Duration.csproj | 2 +- .../encode/numeric/src/Encode.Numeric.csproj | 2 +- .../basic/src/Parameters.Basic.csproj | 2 +- .../src/Parameters.BodyOptionality.csproj | 2 +- .../body-root/src/Parameters.BodyRoot.csproj | 2 +- .../src/Parameters.CollectionFormat.csproj | 2 +- .../path/src/Parameters.Path.csproj | 2 +- .../query/src/Parameters.Query.csproj | 2 +- .../spread/src/Parameters.Spread.csproj | 2 +- .../src/Payload.ContentNegotiation.csproj | 2 +- .../http/payload/head/src/Payload.Head.csproj | 2 +- .../src/Payload.JsonMergePatch.csproj | 2 +- .../media-type/src/Payload.MediaType.csproj | 2 +- .../multipart/src/Payload.MultiPart.csproj | 2 +- .../pageable/src/Payload.Pageable.csproj | 2 +- .../http/payload/xml/src/Payload.Xml.csproj | 2 +- .../v1/src/Resiliency.SrvDriven.V1.csproj | 2 +- .../v2/src/Resiliency.SrvDriven.V2.csproj | 2 +- .../src/Response.StatusCodeRange.csproj | 2 +- .../Spector/http/routes/src/Routes.csproj | 2 +- .../src/Serialization.EncodedName.Json.csproj | 2 +- .../src/Server.Endpoint.NotDefined.csproj | 2 +- .../multiple/src/Server.Path.Multiple.csproj | 2 +- .../path/single/src/Server.Path.Single.csproj | 2 +- .../src/Server.Versions.NotVersioned.csproj | 2 +- .../src/Server.Versions.Versioned.csproj | 2 +- .../src/Service.MultipleServices.csproj | 2 +- .../SpecialHeaders.ConditionalRequest.csproj | 2 +- .../src/SpecialHeaders.Repeatability.csproj | 2 +- .../special-words/src/SpecialWords.csproj | 2 +- .../http/streaming/jsonl/Configuration.json | 3 + .../jsonl/Streaming.Jsonl.NuGet.targets | 6 + .../http/streaming/jsonl/Streaming.Jsonl.slnx | 3 + .../streaming/jsonl/src/Generated/Basic.cs | 34 + .../jsonl/src/Generated/JsonlClient.cs | 27 + .../jsonl/src/Generated/JsonlClientOptions.cs | 18 + .../src/Generated/JsonlClientSettings.cs | 29 + .../Generated/Models/Info.Serialization.cs | 36 + .../jsonl/src/Generated/Models/Info.cs | 17 + .../Generated/Models/StreamingJsonlContext.cs | 14 + .../Generated/StreamingJsonlModelFactory.cs | 14 + .../Generated/schema/ConfigurationSchema.json | 40 + .../jsonl/src/Streaming.Jsonl.csproj | 20 + .../http/streaming/jsonl/tspCodeModel.json | 557 +++++ .../http/streaming/sse/Configuration.json | 3 + .../streaming/sse/Streaming.Sse.NuGet.targets | 6 + .../http/streaming/sse/Streaming.Sse.slnx | 3 + .../Models/RetrievalRequest.Serialization.cs | 36 + .../src/Generated/Models/RetrievalRequest.cs | 13 + .../Generated/Models/StreamingSseContext.cs | 16 + .../http/streaming/sse/src/Generated/Named.cs | 28 + .../streaming/sse/src/Generated/Retrieve.cs | 28 + .../streaming/sse/src/Generated/SseClient.cs | 33 + .../sse/src/Generated/SseClientOptions.cs | 18 + .../sse/src/Generated/SseClientSettings.cs | 29 + .../src/Generated/StreamingSseModelFactory.cs | 17 + .../streaming/sse/src/Generated/Unnamed.cs | 28 + .../Generated/schema/ConfigurationSchema.json | 40 + .../streaming/sse/src/Streaming.Sse.csproj | 20 + .../http/streaming/sse/tspCodeModel.json | 1085 +++++++++ .../http/type/array/src/Type.Array.csproj | 2 +- .../dictionary/src/Type.Dictionary.csproj | 2 +- .../src/Type.Enum.Extensible.csproj | 2 +- .../enum/fixed/src/Type.Enum.Fixed.csproj | 2 +- .../model/empty/src/Type.Model.Empty.csproj | 2 +- ...Model.Inheritance.EnumDiscriminator.csproj | 2 +- ...del.Inheritance.NestedDiscriminator.csproj | 2 +- ....Model.Inheritance.NotDiscriminated.csproj | 2 +- .../Type.Model.Inheritance.Recursive.csproj | 2 +- ...del.Inheritance.SingleDiscriminator.csproj | 2 +- .../model/usage/src/Type.Model.Usage.csproj | 2 +- .../src/Type.Model.Visibility.csproj | 2 +- .../Type.Property.AdditionalProperties.csproj | 2 +- .../src/Type.Property.Nullable.csproj | 2 +- .../src/Type.Property.Optional.csproj | 2 +- .../src/Type.Property.ValueTypes.csproj | 2 +- .../http/type/scalar/src/Type.Scalar.csproj | 2 +- .../http/type/union/src/Type.Union.csproj | 2 +- .../added/v1/src/Versioning.Added.V1.csproj | 2 +- .../added/v2/src/Versioning.Added.V2.csproj | 2 +- .../v1/src/Versioning.MadeOptional.V1.csproj | 2 +- .../v2/src/Versioning.MadeOptional.V2.csproj | 2 +- .../v1/src/Versioning.Removed.V1.csproj | 2 +- .../v2/src/Versioning.Removed.V2.csproj | 2 +- .../src/Versioning.Removed.V2Preview.csproj | 2 +- .../v1/src/Versioning.RenamedFrom.V1.csproj | 2 +- .../v2/src/Versioning.RenamedFrom.V2.csproj | 2 +- ...Versioning.ReturnTypeChangedFrom.V1.csproj | 2 +- ...Versioning.ReturnTypeChangedFrom.V2.csproj | 2 +- .../src/Versioning.TypeChangedFrom.V1.csproj | 2 +- .../src/Versioning.TypeChangedFrom.V2.csproj | 2 +- packages/http-client-csharp/package-lock.json | 1960 +++++------------ packages/http-client-csharp/package.json | 36 +- 132 files changed, 4060 insertions(+), 1625 deletions(-) create mode 100644 packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/JsonLinesBinaryContentDefinition.cs create mode 100644 packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputStreamingType.cs create mode 100644 packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputStreamingTypeConverter.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Jsonl/JsonlTests.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Configuration.json create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.NuGet.targets create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.slnx create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClient.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientOptions.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientSettings.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.Serialization.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/StreamingJsonlContext.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/schema/ConfigurationSchema.json create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Streaming.Jsonl.csproj create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Configuration.json create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.NuGet.targets create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.slnx create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.Serialization.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClient.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientOptions.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientSettings.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/schema/ConfigurationSchema.json create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Streaming.Sse.csproj create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/tspCodeModel.json diff --git a/packages/http-client-csharp/emitter/src/lib/operation-converter.ts b/packages/http-client-csharp/emitter/src/lib/operation-converter.ts index 59f35f75e03..c382b649f54 100644 --- a/packages/http-client-csharp/emitter/src/lib/operation-converter.ts +++ b/packages/http-client-csharp/emitter/src/lib/operation-converter.ts @@ -24,6 +24,7 @@ import { SdkQueryParameter, SdkServiceMethod, SdkServiceResponseHeader, + SdkStreamMetadata, SdkType, shouldGenerateConvenient, shouldGenerateProtocol, @@ -34,9 +35,12 @@ import { getDeprecated, isErrorModel, NoTarget, + Union, } from "@typespec/compiler"; +import { unsafe_getEventDefinitions } from "@typespec/events/experimental"; import { HttpStatusCodeRange } from "@typespec/http"; import { getResourceOperation } from "@typespec/rest"; +import { isTerminalEvent } from "@typespec/sse"; import { CSharpEmitterContext } from "../sdk-context.js"; import { collectionFormatToDelimMap } from "../type/collection-format.js"; import { HttpResponseHeader } from "../type/http-response-header.js"; @@ -62,6 +66,7 @@ import { InputMethodParameter, InputPathParameter, InputQueryParameter, + InputStreamingType, InputType, } from "../type/input-type.js"; import { convertLroFinalStateVia } from "../type/operation-final-state-via.js"; @@ -232,7 +237,9 @@ export function fromSdkServiceMethodOperation( path: method.operation.path, externalDocsUrl: getExternalDocs(sdkContext, method.operation.__raw.operation)?.url, requestMediaTypes: requestMediaTypes, - bufferResponse: true, + bufferResponse: !method.operation.responses.some((response) => + isSupportedStream(response.streamMetadata), + ), generateProtocolMethod: shouldGenerateProtocol(sdkContext, method.operation.__raw.operation), generateConvenienceMethod: generateConvenience, crossLanguageDefinitionId: method.crossLanguageDefinitionId, @@ -349,8 +356,23 @@ function fromSdkServiceMethodParameters( for (const p of method.parameters) { const methodInputParameter = diagnostics.pipe(fromMethodParameter(sdkContext, p, namespace)); const operationHttpParameter = getHttpOperationParameter(method, p); + const streamMetadata = method.operation.bodyParam?.streamMetadata; + const isStreamingBodyParameter = + isJsonLinesStream(streamMetadata) && + method.operation.bodyParam!.methodParameterSegments.some((segments) => + segments.some( + (segment) => + segment === p || segment.crossLanguageDefinitionId === p.crossLanguageDefinitionId, + ), + ); if (!operationHttpParameter) { + if (isStreamingBodyParameter) { + methodInputParameter.type = diagnostics.pipe( + fromSdkStreamMetadata(sdkContext, streamMetadata), + ); + methodInputParameter.location = RequestLocation.Body; + } parameters.push(methodInputParameter); continue; } @@ -363,6 +385,12 @@ function fromSdkServiceMethodParameters( rootApiVersions, diagnostics, ); + if (isStreamingBodyParameter) { + methodInputParameter.type = diagnostics.pipe( + fromSdkStreamMetadata(sdkContext, streamMetadata), + ); + methodInputParameter.location = RequestLocation.Body; + } parameters.push(methodInputParameter); } @@ -376,6 +404,15 @@ function updateMethodParameter( rootApiVersions: string[], diagnostics: ReturnType, ): void { + if ( + operationHttpParameter.kind === "body" && + isJsonLinesStream(operationHttpParameter.streamMetadata) + ) { + methodParameter.type = diagnostics.pipe( + fromSdkStreamMetadata(sdkContext, operationHttpParameter.streamMetadata), + ); + } + // for content type parameter if (isContentType(operationHttpParameter)) { methodParameter.type = diagnostics.pipe( @@ -406,7 +443,9 @@ function fromSdkServiceMethodResponse( const diagnostics = createDiagnosticCollector(); return diagnostics.wrap({ - type: diagnostics.pipe(getResponseType(sdkContext, methodResponse.type)), + type: isSupportedStream(methodResponse.streamMetadata) + ? diagnostics.pipe(fromSdkStreamMetadata(sdkContext, methodResponse.streamMetadata)) + : diagnostics.pipe(getResponseType(sdkContext, methodResponse.type)), resultSegments: methodResponse.resultSegments?.map((segment) => getResponseSegmentName(segment), ), @@ -605,7 +644,9 @@ function fromBodyParameter( rootApiVersions: string[], ): [InputBodyParameter, readonly Diagnostic[]] { const diagnostics = createDiagnosticCollector(); - const parameterType = diagnostics.pipe(fromSdkType(sdkContext, p.type, p)); + const parameterType = isJsonLinesStream(p.streamMetadata) + ? diagnostics.pipe(fromSdkStreamMetadata(sdkContext, p.streamMetadata)) + : diagnostics.pipe(fromSdkType(sdkContext, p.type, p)); const retVar: InputBodyParameter = { kind: "body", @@ -723,7 +764,9 @@ export function fromSdkHttpOperationResponse( const range = sdkResponse.statusCodes; retVar = { statusCodes: toStatusCodesArray(range), - bodyType: diagnostics.pipe(getResponseType(sdkContext, sdkResponse.type)), + bodyType: isSupportedStream(sdkResponse.streamMetadata) + ? diagnostics.pipe(fromSdkStreamMetadata(sdkContext, sdkResponse.streamMetadata)) + : diagnostics.pipe(getResponseType(sdkContext, sdkResponse.type)), headers: diagnostics.pipe(fromSdkServiceResponseHeaders(sdkContext, sdkResponse.headers)), isErrorResponse: sdkResponse.type !== undefined && isErrorModel(sdkContext.program, sdkResponse.type.__raw!), @@ -735,6 +778,66 @@ export function fromSdkHttpOperationResponse( return diagnostics.wrap(retVar); } +function fromSdkStreamMetadata( + sdkContext: CSharpEmitterContext, + streamMetadata: SdkStreamMetadata, +): [InputStreamingType, readonly Diagnostic[]] { + const diagnostics = createDiagnosticCollector(); + const originalType = streamMetadata.originalType; + const streamKind = getStreamKind(streamMetadata)!; + let terminalEventType: string | undefined; + let terminalEventValue: string | undefined; + + if (streamKind === "sse" && streamMetadata.streamType.__raw?.kind === "Union") { + const eventDefinitions = diagnostics.pipe( + unsafe_getEventDefinitions(sdkContext.program, streamMetadata.streamType.__raw as Union), + ); + const terminalDefinition = eventDefinitions.find((definition) => + isTerminalEvent(sdkContext.program, definition.root), + ); + if (terminalDefinition?.payloadType.kind === "String") { + terminalEventType = terminalDefinition.eventType; + terminalEventValue = terminalDefinition.payloadType.value; + } + } + + return diagnostics.wrap({ + kind: "streaming", + name: originalType.kind === "model" ? originalType.name : "Stream", + valueType: diagnostics.pipe(fromSdkType(sdkContext, streamMetadata.streamType)), + streamKind, + contentTypes: streamMetadata.contentTypes, + terminalEventType, + terminalEventValue, + crossLanguageDefinitionId: + originalType.kind === "model" ? originalType.crossLanguageDefinitionId : "", + }); +} + +function getStreamKind( + streamMetadata: SdkStreamMetadata | undefined, +): InputStreamingType["streamKind"] | undefined { + if (streamMetadata?.contentTypes.includes("application/jsonl")) { + return "jsonl"; + } + if (streamMetadata?.contentTypes.includes("text/event-stream")) { + return "sse"; + } + return undefined; +} + +function isSupportedStream( + streamMetadata: SdkStreamMetadata | undefined, +): streamMetadata is SdkStreamMetadata { + return getStreamKind(streamMetadata) !== undefined; +} + +function isJsonLinesStream( + streamMetadata: SdkStreamMetadata | undefined, +): streamMetadata is SdkStreamMetadata { + return getStreamKind(streamMetadata) === "jsonl"; +} + function fromSdkServiceResponseHeaders( sdkContext: CSharpEmitterContext, headers: SdkServiceResponseHeader[], diff --git a/packages/http-client-csharp/emitter/src/type/input-type.ts b/packages/http-client-csharp/emitter/src/type/input-type.ts index ac02a59094f..62e9333331e 100644 --- a/packages/http-client-csharp/emitter/src/type/input-type.ts +++ b/packages/http-client-csharp/emitter/src/type/input-type.ts @@ -79,6 +79,7 @@ export type InputType = | InputEnumType | InputEnumValueType | InputArrayType + | InputStreamingType | InputDictionaryType | InputNullableType; @@ -308,6 +309,17 @@ export interface InputArrayType extends InputTypeBase { crossLanguageDefinitionId: string; } +export interface InputStreamingType extends InputTypeBase { + kind: "streaming"; + name: string; + valueType: InputType; + streamKind: "jsonl" | "sse"; + contentTypes: string[]; + terminalEventType?: string; + terminalEventValue?: string; + crossLanguageDefinitionId: string; +} + export interface InputDictionaryType extends InputTypeBase { kind: "dict"; keyType: InputType; diff --git a/packages/http-client-csharp/emitter/test/Unit/operation-converter.test.ts b/packages/http-client-csharp/emitter/test/Unit/operation-converter.test.ts index 3863f242393..430b8ed00f3 100644 --- a/packages/http-client-csharp/emitter/test/Unit/operation-converter.test.ts +++ b/packages/http-client-csharp/emitter/test/Unit/operation-converter.test.ts @@ -215,6 +215,95 @@ describe("Operation Converter", () => { }); describe("Operation response type conversion", () => { + it("preserves JSONL stream item types", async () => { + const program = await typeSpecCompile( + ` + model Info { + desc: string; + } + + @post op send(stream: JsonlStream): void; + op receive(): JsonlStream; + `, + runner, + ); + const context = createEmitterContext(program); + const sdkContext = await createCSharpSdkContext(context); + const [root] = createModel(sdkContext); + + const send = root.clients[0].methods.find((method) => method.name === "send"); + ok(send); + const sendParameter = send.parameters.find((parameter) => parameter.name === "stream"); + ok(sendParameter); + ok(sendParameter.type.kind === "streaming"); + ok(sendParameter.type.valueType.kind === "model"); + strictEqual(sendParameter.type.valueType.name, "Info"); + + const bodyParameter = send.operation.parameters.find( + (parameter) => parameter.kind === "body", + ); + ok(bodyParameter); + ok(bodyParameter.type.kind === "streaming"); + ok(bodyParameter.type.valueType.kind === "model"); + strictEqual(bodyParameter.type.valueType.name, "Info"); + + const receive = root.clients[0].methods.find((method) => method.name === "receive"); + ok(receive); + ok(receive.response.type?.kind === "streaming"); + ok(receive.response.type.valueType.kind === "model"); + strictEqual(receive.response.type.valueType.name, "Info"); + ok(receive.operation.responses[0].bodyType?.kind === "streaming"); + ok(receive.operation.responses[0].bodyType.valueType.kind === "model"); + strictEqual(receive.operation.responses[0].bodyType.valueType.name, "Info"); + strictEqual(receive.operation.bufferResponse, false); + }); + + it("preserves SSE event unions and terminal events", async () => { + const program = await typeSpecCompile( + ` + model ResponseCreated { + id: string; + } + + model ResponseDelta { + delta: string; + } + + @events + union ResponseEvents { + @Events.contentType("application/json") + responseCreated: ResponseCreated, + + @Events.contentType("application/json") + responseDelta: ResponseDelta, + + @Events.contentType("text/plain") + @terminalEvent + "[DONE]", + } + + op receive(): SSEStream; + `, + runner, + { IsSseNeeded: true }, + ); + const context = createEmitterContext(program); + const sdkContext = await createCSharpSdkContext(context); + const [root] = createModel(sdkContext); + + const receive = root.clients[0].methods.find((method) => method.name === "receive"); + ok(receive); + ok(receive.response.type?.kind === "streaming"); + strictEqual(receive.response.type.streamKind, "sse"); + ok(receive.response.type.valueType.kind === "union"); + strictEqual(receive.response.type.valueType.name, "ResponseEvents"); + strictEqual(receive.response.type.terminalEventType, undefined); + strictEqual(receive.response.type.terminalEventValue, "[DONE]"); + ok(receive.operation.responses[0].bodyType?.kind === "streaming"); + strictEqual(receive.operation.responses[0].bodyType.streamKind, "sse"); + strictEqual(receive.operation.bufferResponse, false); + }); + describe("With anonymous union enum response type", () => { it("should convert anonymous union enum response type to value type", async () => { const program = await typeSpecCompile( diff --git a/packages/http-client-csharp/emitter/test/Unit/utils/test-util.ts b/packages/http-client-csharp/emitter/test/Unit/utils/test-util.ts index 3b6d60db3ca..7bb74b54bf6 100644 --- a/packages/http-client-csharp/emitter/test/Unit/utils/test-util.ts +++ b/packages/http-client-csharp/emitter/test/Unit/utils/test-util.ts @@ -3,8 +3,11 @@ import type { CreateSdkContextOptions } from "@azure-tools/typespec-client-gener import { SdkTestLibrary } from "@azure-tools/typespec-client-generator-core/testing"; import { CompilerOptions, EmitContext, Program } from "@typespec/compiler"; import { createTestHost, TestHost } from "@typespec/compiler/testing"; +import { EventsTestLibrary } from "@typespec/events/testing"; import { HttpTestLibrary } from "@typespec/http/testing"; import { RestTestLibrary } from "@typespec/rest/testing"; +import { SSETestLibrary } from "@typespec/sse/testing"; +import { StreamsTestLibrary } from "@typespec/streams/testing"; import { VersioningTestLibrary } from "@typespec/versioning/testing"; import { XmlTestLibrary } from "@typespec/xml/testing"; import { LoggerLevel } from "../../../src/lib/logger-level.js"; @@ -16,6 +19,9 @@ export async function createEmitterTestHost(): Promise { libraries: [ RestTestLibrary, HttpTestLibrary, + EventsTestLibrary, + SSETestLibrary, + StreamsTestLibrary, VersioningTestLibrary, AzureCoreTestLibrary, SdkTestLibrary, @@ -43,6 +49,7 @@ export interface TypeSpecCompileOptions { AuthDecorator?: string; NoEmit?: boolean; IsVersionNeeded?: boolean; + IsSseNeeded?: boolean; } export async function typeSpecCompile( @@ -55,6 +62,7 @@ export async function typeSpecCompile( const needTCGC = options?.IsTCGCNeeded ?? false; const needXml = options?.IsXmlNeeded ?? false; const needVersion = options?.IsVersionNeeded ?? true; + const needSse = options?.IsSseNeeded ?? false; const authDecorator = options?.AuthDecorator ?? `@useAuth(ApiKeyAuth)`; const versions = `enum Versions { @@ -75,12 +83,16 @@ export async function typeSpecCompile( const fileContent = ` import "@typespec/rest"; import "@typespec/http"; + import "@typespec/http/streams"; + ${needSse ? 'import "@typespec/events";\nimport "@typespec/sse";' : ""} import "@typespec/versioning"; ${needXml ? 'import "@typespec/xml";' : ""} ${needAzureCore ? 'import "@azure-tools/typespec-azure-core";' : ""} ${needTCGC ? 'import "@azure-tools/typespec-client-generator-core";' : ""} using TypeSpec.Rest; using TypeSpec.Http; + using TypeSpec.Http.Streams; + ${needSse ? "using TypeSpec.Events;\nusing TypeSpec.SSE;" : ""} using TypeSpec.Versioning; ${needXml ? "using TypeSpec.Xml;" : ""} ${needAzureCore ? "using Azure.Core;\nusing Azure.Core.Traits;" : ""} diff --git a/packages/http-client-csharp/eng/scripts/Spector-Helper.psm1 b/packages/http-client-csharp/eng/scripts/Spector-Helper.psm1 index 4cc8b7db67b..addc61d373f 100644 --- a/packages/http-client-csharp/eng/scripts/Spector-Helper.psm1 +++ b/packages/http-client-csharp/eng/scripts/Spector-Helper.psm1 @@ -5,7 +5,6 @@ $failingSpecs = @( Join-Path 'http' 'type' 'model' 'templated' Join-Path 'http' 'type' 'file' Join-Path 'http' 'client' 'naming' # pending until https://github.com/microsoft/typespec/issues/5653 is resolved - Join-Path 'http' 'streaming' 'jsonl' Join-Path 'http' 'type' 'union' 'discriminated' # pending design Join-Path 'http' 'authentication' 'noauth' 'union' # pending design ) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/JsonLinesBinaryContentDefinition.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/JsonLinesBinaryContentDefinition.cs new file mode 100644 index 00000000000..cc33b9b655c --- /dev/null +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/JsonLinesBinaryContentDefinition.cs @@ -0,0 +1,324 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.TypeSpec.Generator.ClientModel.Snippets; +using Microsoft.TypeSpec.Generator.Expressions; +using Microsoft.TypeSpec.Generator.Primitives; +using Microsoft.TypeSpec.Generator.Providers; +using Microsoft.TypeSpec.Generator.Snippets; +using Microsoft.TypeSpec.Generator.Statements; +using static Microsoft.TypeSpec.Generator.Snippets.Snippet; + +namespace Microsoft.TypeSpec.Generator.ClientModel.Providers +{ + internal sealed class JsonLinesBinaryContentDefinition : TypeProvider + { + private sealed class JsonLinesBinaryContentTemplate { } + + private readonly CSharpType _t; + private readonly CSharpType _valuesType; + private readonly FieldProvider _valuesField; + private readonly FieldProvider _newLineField; + private readonly FieldProvider _spaceField; + private readonly ParameterProvider _streamParameter = new("stream", FormattableStringHelpers.Empty, typeof(Stream)); + + public JsonLinesBinaryContentDefinition() + { + _t = typeof(JsonLinesBinaryContentTemplate<>).GetGenericArguments()[0]; + _valuesType = new CSharpType(typeof(IAsyncEnumerable<>), _t); + _valuesField = new FieldProvider( + FieldModifiers.Private | FieldModifiers.ReadOnly, + _valuesType, + "_values", + this); + _newLineField = new FieldProvider( + FieldModifiers.Private | FieldModifiers.Static | FieldModifiers.ReadOnly, + typeof(byte[]), + "_newLine", + this, + initializationValue: New.Array(typeof(byte), false, false, [Literal(10)])); + _spaceField = new FieldProvider( + FieldModifiers.Private | FieldModifiers.Static | FieldModifiers.ReadOnly, + typeof(byte[]), + "_space", + this, + initializationValue: New.Array(typeof(byte), false, false, [Literal(32)])); + } + + protected override CSharpType[] GetTypeArguments() => [_t]; + + protected override string BuildName() => "JsonLinesBinaryContent"; + + protected override string BuildNamespace() => ScmCodeModelGenerator.Instance.TypeFactory.PrimaryNamespace; + + protected override TypeSignatureModifiers BuildDeclarationModifiers() + => TypeSignatureModifiers.Internal | TypeSignatureModifiers.Sealed | TypeSignatureModifiers.Class; + + protected override string BuildRelativeFilePath() + => Path.Combine("src", "Generated", "Internal", $"{Name}.cs"); + + protected override CSharpType BuildBaseType() + => ScmCodeModelGenerator.Instance.TypeFactory.RequestContentApi.RequestContentType; + + protected override FieldProvider[] BuildFields() => [_valuesField, _newLineField, _spaceField]; + + protected override ConstructorProvider[] BuildConstructors() + { + var values = new ParameterProvider("values", FormattableStringHelpers.Empty, _valuesType); + return + [ + new ConstructorProvider( + new ConstructorSignature(Type, null, MethodSignatureModifiers.Public, [values]), + new MethodBodyStatement[] { _valuesField.Assign(values).Terminate() }, + this) + ]; + } + + protected override MethodProvider[] BuildMethods() + => + [ + BuildWriteToAsyncMethod(), + BuildWriteJsonAsyncMethod(), + BuildWriteToMethod(), + BuildTryComputeLengthMethod(), + BuildDisposeMethod(), + BuildDeserializeModelMethod(), + BuildDeserializeValueMethod() + ]; + + private MethodProvider BuildWriteToAsyncMethod() + { + var cancellationToken = KnownParameters.CancellationTokenParameter; + var values = _valuesField.AsValueExpression.Invoke( + "WithCancellation", + [cancellationToken], + null, + false, + false, + typeof(TaskAsyncEnumerableExtensions)); + var loop = new ForEachStatement(_t, "value", values, true, out var value); + ValueExpression stream = _streamParameter; + var wireOptions = Static(ScmCodeModelGenerator.Instance.ModelSerializationExtensionsDefinition.Type) + .Property(ScmCodeModelGenerator.Instance.ModelSerializationExtensionsDefinition.WireOptionsField.Name); + var firstDeclaration = Declare("first", typeof(bool), True, out var first); + loop.Add(new IfStatement(first.Equal(False)) + { + stream.Invoke( + nameof(Stream.WriteAsync), + [_newLineField, Literal(0), Literal(1), cancellationToken], + null, + true).Terminate() + }); + loop.Add(UsingDeclare( + "buffer", + typeof(MemoryStream), + New.Instance(), + out var buffer)); + loop.Add(UsingDeclare( + "writer", + typeof(Utf8JsonWriter), + New.Instance(buffer), + out var writer)); + loop.Add(writer.As().WriteObjectValue(value.As(_t), wireOptions)); + loop.Add(writer.As().FlushAsync(cancellationToken).Terminate()); + loop.Add(Declare("bytes", typeof(byte[]), buffer.Invoke(nameof(MemoryStream.ToArray)), out var bytes)); + loop.Add(Static(Type).Invoke( + "WriteJsonAsync", + [stream, bytes, cancellationToken], + null, + true).Terminate()); + loop.Add(first.Assign(False).Terminate()); + + var signature = new MethodSignature( + nameof(BinaryContent.WriteToAsync), + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Override | MethodSignatureModifiers.Async, + typeof(Task), + null, + [_streamParameter, cancellationToken]); + return new MethodProvider(signature, new MethodBodyStatement[] { firstDeclaration, loop }, this); + } + + private MethodProvider BuildWriteJsonAsyncMethod() + { + var bytesParameter = new ParameterProvider("bytes", FormattableStringHelpers.Empty, typeof(byte[])); + var cancellationToken = KnownParameters.CancellationTokenParameter; + ValueExpression stream = _streamParameter; + ValueExpression bytes = bytesParameter; + var indexableBytes = new IndexableExpression(bytes); + var inStringDeclaration = Declare("inString", typeof(bool), False, out var inString); + var escapedDeclaration = Declare("escaped", typeof(bool), False, out var escaped); + var startDeclaration = Declare("start", typeof(int), Literal(0), out var start); + var indexDeclaration = Declare("i", typeof(int), Literal(0), out var index); + var loop = new ForStatement(null, index.LessThan(bytes.Property("Length")), index.Increment()); + loop.Add(Declare("current", typeof(byte), indexableBytes[index], out var current)); + loop.Add(new IfElseStatement( + new IfStatement(inString) + { + new IfElseStatement( + new IfStatement(escaped) + { + escaped.Assign(False).Terminate() + }, + new IfElseStatement( + new IfStatement(current.Equal(Literal('\\'))) + { + escaped.Assign(True).Terminate() + }, + new IfStatement(current.Equal(Literal('"'))) + { + inString.Assign(False).Terminate() + })) + }, + new IfElseStatement( + new IfStatement(current.Equal(Literal('"'))) + { + inString.Assign(True).Terminate() + }, + new IfStatement(current.Equal(Literal(':'))) + { + stream.Invoke( + nameof(Stream.WriteAsync), + [ + bytes, + start, + new BinaryOperatorExpression( + "+", + new BinaryOperatorExpression("-", index, start), + Literal(1)), + cancellationToken + ], + null, + true).Terminate(), + stream.Invoke( + nameof(Stream.WriteAsync), + [_spaceField, Literal(0), Literal(1), cancellationToken], + null, + true).Terminate(), + start.Assign(new BinaryOperatorExpression("+", index, Literal(1))).Terminate() + }))); + + var signature = new MethodSignature( + "WriteJsonAsync", + null, + MethodSignatureModifiers.Private | MethodSignatureModifiers.Static | MethodSignatureModifiers.Async, + typeof(Task), + null, + [_streamParameter, bytesParameter, cancellationToken]); + return new MethodProvider( + signature, + new MethodBodyStatement[] + { + inStringDeclaration, + escapedDeclaration, + startDeclaration, + indexDeclaration, + loop, + stream.Invoke( + nameof(Stream.WriteAsync), + [ + bytes, + start, + new BinaryOperatorExpression("-", bytes.Property("Length"), start), + cancellationToken + ], + null, + true).Terminate() + }, + this); + } + + private MethodProvider BuildWriteToMethod() + { + var signature = new MethodSignature( + nameof(BinaryContent.WriteTo), + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Override, + null, + null, + [_streamParameter, KnownParameters.CancellationTokenParameter]); + return new MethodProvider( + signature, + new MethodBodyStatement[] { Throw(New.NotSupportedException(Literal("JSON Lines content can only be written asynchronously."))) }, + this); + } + + private MethodProvider BuildTryComputeLengthMethod() + { + var length = new ParameterProvider("length", FormattableStringHelpers.Empty, typeof(long), isOut: true); + var signature = new MethodSignature( + nameof(BinaryContent.TryComputeLength), + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Override, + typeof(bool), + null, + [length]); + return new MethodProvider( + signature, + new MethodBodyStatement[] { length.Assign(Literal(0)).Terminate(), Return(False) }, + this); + } + + private MethodProvider BuildDisposeMethod() + { + var signature = new MethodSignature( + nameof(IDisposable.Dispose), + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Override, + null, + null, + []); + return new MethodProvider(signature, Array.Empty(), this); + } + + private MethodProvider BuildDeserializeModelMethod() + { + var data = new ParameterProvider("data", FormattableStringHelpers.Empty, typeof(BinaryData)); + var wireOptions = Static(ScmCodeModelGenerator.Instance.ModelSerializationExtensionsDefinition.Type) + .Property(ScmCodeModelGenerator.Instance.ModelSerializationExtensionsDefinition.WireOptionsField.Name); + var signature = new MethodSignature( + "DeserializeModel", + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Static, + _t, + null, + [data]); + return new MethodProvider( + signature, + new MethodBodyStatement[] + { + Return(Static(typeof(ModelReaderWriter)).Invoke( + nameof(ModelReaderWriter.Read), + [data, wireOptions], + [_t])) + }, + this); + } + + private MethodProvider BuildDeserializeValueMethod() + { + var data = new ParameterProvider("data", FormattableStringHelpers.Empty, typeof(BinaryData)); + var signature = new MethodSignature( + "DeserializeValue", + null, + MethodSignatureModifiers.Public | MethodSignatureModifiers.Static, + _t, + null, + [data]); + return new MethodProvider( + signature, + new MethodBodyStatement[] + { + Return(data.Invoke("ToObjectFromJson", [], [_t])) + }, + this); + } + } +} diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs index b18c378a1bd..8cb40ecedec 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs @@ -2,12 +2,14 @@ // Licensed under the MIT License. using System; +using System.ClientModel; using System.ClientModel.Primitives; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; +using System.Net.ServerSentEvents; using System.Text.Json; using System.Threading.Tasks; using System.Xml.Linq; @@ -104,7 +106,7 @@ protected virtual IReadOnlyList BuildMethods() } else { - if (ProtocolMethodExists(syncProtocol)) + if (!HasStreamingRequestOrResponse() && ProtocolMethodExists(syncProtocol)) { methods.Add(BuildConvenienceMethod(syncProtocol, false)); } @@ -202,6 +204,7 @@ private ScmMethodProvider BuildConvenienceMethod(MethodProvider protocolMethod, // Recompute the response body type so we can branch the body accordingly. GetResponseType(ServiceMethod.Operation.Responses, true, isAsync, out var responseBodyType); + var streamingResponse = GetStreamingResponse(); MethodBodyStatement[] methodBody; TypeProvider? collection = null; @@ -210,6 +213,63 @@ private ScmMethodProvider BuildConvenienceMethod(MethodProvider protocolMethod, collection = ScmCodeModelGenerator.Instance.TypeFactory.ClientResponseApi.CreateClientCollectionResultDefinition(Client, _pagingServiceMethod, responseBodyType, isAsync); methodBody = [.. GetPagingMethodBody(collection, convenienceBodyParameters, true)]; } + else if (streamingResponse != null) + { + if (streamingResponse.StreamKind == "sse") + { + ValueExpression terminalPredicate = Null; + if (streamingResponse.TerminalEventValue != null) + { + var sseItemType = new CSharpType(typeof(SseItem<>), typeof(BinaryData)); + var item = new VariableExpression(sseItemType, "item"); + ValueExpression isTerminal = item.Property("Data") + .Invoke("ToString") + .Equal(Literal(streamingResponse.TerminalEventValue)); + if (streamingResponse.TerminalEventType != null) + { + isTerminal = item.Property("EventType") + .Equal(Literal(streamingResponse.TerminalEventType)) + .And(isTerminal); + } + terminalPredicate = new FuncExpression([item.Declaration], isTerminal); + } + + methodBody = + [ + .. GetStackVariablesForProtocolParamConversion(convenienceBodyParameters, out var declarations), + Declare("result", This.Invoke(protocolMethod.Signature, [.. GetProtocolMethodArguments(declarations)], isAsync).ToApi(), out ClientResponseApi result), + Return(Static(typeof(AsyncStreamingClientResult)).Invoke( + "CreateSse", + [ + result.GetRawResponse(), + terminalPredicate, + signatureParameters[^1] + ])) + ]; + } + else + { + var itemType = ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingResponse.ValueType) + ?? throw new InvalidOperationException("Unable to resolve JSON Lines stream item type."); + var jsonLinesContentType = new JsonLinesBinaryContentDefinition().Type.MakeGenericType([itemType]); + var deserializeMethod = streamingResponse.ValueType is InputModelType + ? "DeserializeModel" + : "DeserializeValue"; + methodBody = + [ + .. GetStackVariablesForProtocolParamConversion(convenienceBodyParameters, out var declarations), + Declare("result", This.Invoke(protocolMethod.Signature, [.. GetProtocolMethodArguments(declarations)], isAsync).ToApi(), out ClientResponseApi result), + Return(Static(typeof(AsyncStreamingClientResult)).Invoke( + "CreateJsonLines", + [ + result.GetRawResponse(), + Static(jsonLinesContentType).Property(deserializeMethod), + signatureParameters[^1] + ], + [itemType])) + ]; + } + } else if (responseBodyType is null) { methodBody = @@ -312,7 +372,22 @@ void AddUtf8JsonContent(CSharpType serializationType, ValueExpression value) if (parameter.Location == ParameterLocation.Body) { - if (parameter.Type.IsReadOnlyMemory) + if (parameter.Type.IsIAsyncEnumerableOfT) + { + var contentType = new JsonLinesBinaryContentDefinition().Type.MakeGenericType([parameter.Type.Arguments[0]]); + var inputParameter = ServiceMethod.Parameters.FirstOrDefault(p => + p.Location == InputRequestLocation.Body && + string.Equals(p.Name, parameter.Name, StringComparison.OrdinalIgnoreCase)); + ValueExpression contentExpression = inputParameter is { IsRequired: false } + ? new TernaryConditionalExpression( + parameter.Equal(Null), + Null, + New.Instance(contentType, parameter)) + : New.Instance(contentType, parameter); + statements.Add(UsingDeclare("content", requestContentType, contentExpression, out var content)); + declarations["content"] = content; + } + else if (parameter.Type.IsReadOnlyMemory) { statements.Add(UsingDeclare("content", requestContentType, BinaryContentHelperSnippets.FromEnumerable(parameter.Property("Span")), out var content)); declarations["content"] = content; @@ -890,17 +965,28 @@ private IReadOnlyList GetProtocolMethodArguments(Dictionary 1 } && nonBodyProperties?.ContainsKey(protocolParam.Name) != true) + if (protocolParam.InputParameter?.MethodParameterSegments is { Count: > 1 } + && nonBodyProperties?.ContainsKey(protocolParam.Name) != true) { // The MethodParameterSegments represents a path (e.g., ['Params', 'foo'] means params.foo) var rootParameterName = protocolParam.InputParameter.MethodParameterSegments[0].Name; - if (!convenienceParamsMap.TryGetValue(rootParameterName, out var convenienceParam) || - // Body parameters are handled separately - convenienceParam.Location == ParameterLocation.Body) + if (!convenienceParamsMap.TryGetValue(rootParameterName, out var convenienceParam)) { continue; } + // Body parameters are handled separately. + if (convenienceParam.Location == ParameterLocation.Body) + { + if (protocolParam.IsContentParameter + && convenienceParam.Type.IsIAsyncEnumerableOfT + && declarations.TryGetValue("content", out var streamingContent)) + { + AddArgument(protocolParam, streamingContent); + } + continue; + } + // Navigate through the property path var propertySegments = protocolParam.InputParameter.MethodParameterSegments .Skip(1) @@ -970,7 +1056,7 @@ private IReadOnlyList GetProtocolMethodArguments(Dictionary respons private CSharpType GetConvenienceReturnType(IReadOnlyList responses, bool isAsync, out CSharpType? responseBodyType) { var response = responses.FirstOrDefault(r => !r.IsErrorResponse); + if (response?.BodyType is InputStreamingType streamingType) + { + responseBodyType = streamingType.StreamKind == "sse" + ? new CSharpType(typeof(SseItem<>), typeof(BinaryData)) + : ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingType.ValueType); + var resultType = new CSharpType( + typeof(AsyncStreamingClientResult<>), + responseBodyType ?? throw new InvalidOperationException("Unable to resolve streaming response type.")); + return isAsync ? new CSharpType(typeof(Task<>), resultType) : resultType; + } + responseBodyType = GetResponseBodyType(response?.BodyType); if (_pagingServiceMethod != null) @@ -1401,6 +1501,14 @@ private CSharpType GetConvenienceReturnType(IReadOnlyList ServiceMethod.Operation.Responses + .FirstOrDefault(response => !response.IsErrorResponse)?.BodyType as InputStreamingType; + + private bool HasStreamingRequestOrResponse() + => GetStreamingResponse() != null || + ServiceMethod.Parameters.Any(parameter => parameter.Type is InputStreamingType); + private bool ShouldMakeProtocolMethodParametersRequired() { var convenienceMethodParameterCount = ConvenienceMethodParameters.Count; diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmOutputLibrary.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmOutputLibrary.cs index dadaad84144..2393adedb2c 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmOutputLibrary.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmOutputLibrary.cs @@ -84,6 +84,7 @@ protected override TypeProvider[] BuildTypeProviders() new ErrorResultDefinition(), new ClientUriBuilderDefinition(), new Utf8JsonBinaryContentDefinition(), + new JsonLinesBinaryContentDefinition(), new BinaryContentHelperDefinition(), new ClientPipelineExtensionsDefinition(), new CancellationTokenExtensionsDefinition(), diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmTypeFactory.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmTypeFactory.cs index 15596c96918..129af4c4f72 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmTypeFactory.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/ScmTypeFactory.cs @@ -129,6 +129,9 @@ private static void PopulateRootOutputModelsFromTypeRecursive(InputType? type, H case InputNullableType nullableType: PopulateRootOutputModelsFromTypeRecursive(nullableType.Type, targetSet, visited); break; + case InputStreamingType streamingType: + PopulateRootOutputModelsFromTypeRecursive(streamingType.ValueType, targetSet, visited); + break; case InputUnionType unionType: foreach (var variantType in unionType.VariantTypes) { diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs index 0f42e1b498d..a26997e9b7a 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs @@ -6,6 +6,7 @@ using System.ClientModel.Primitives; using System.Collections.Generic; using System.Linq; +using System.Net.ServerSentEvents; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis; @@ -30,6 +31,235 @@ internal class ScmMethodProviderCollectionTests InputFactory.Property("p2", InputPrimitiveType.String, isRequired: true), ]); + [Test] + public void JsonLinesRequestGeneratesAsyncStreamingConvenienceMethod() + { + var itemType = InputFactory.Model( + "Info", + properties: [InputFactory.Property("desc", InputPrimitiveType.String, isRequired: true)]); + var streamType = new InputStreamingType( + "JsonlStream", + "Streaming.Jsonl.JsonlStream", + itemType, + ["application/jsonl"]); + var operation = InputFactory.Operation( + "Send", + parameters: [InputFactory.BodyParameter("stream", streamType, isRequired: true)], + responses: [InputFactory.OperationResponse([204])], + requestMediaTypes: ["application/jsonl"], + httpMethod: "POST"); + var serviceMethod = InputFactory.BasicServiceMethod( + "Send", + operation, + parameters: + [ + InputFactory.MethodParameter( + "stream", + streamType, + location: InputRequestLocation.Body, + isRequired: true) + ]); + var inputClient = InputFactory.Client("TestClient", methods: [serviceMethod]); + + MockHelpers.LoadMockGenerator(inputModels: () => [itemType], clients: () => [inputClient]); + var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient); + Assert.IsNotNull(client); + + var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + Assert.AreEqual(3, methodCollection.Count); + Assert.IsFalse(methodCollection.Any(method => + method.Signature.Name == "Send" && + method.Signature.Parameters.All(parameter => parameter.Name != "content"))); + + var convenienceMethod = methodCollection.Single(method => + method.Signature.Name == "SendAsync" && + method.Signature.Parameters.All(parameter => parameter.Name != "content")); + Assert.IsTrue(convenienceMethod.Signature.Parameters[0].Type.IsIAsyncEnumerableOfT); + StringAssert.Contains( + "using global::System.ClientModel.BinaryContent content = new global::Sample.JsonLinesBinaryContent(stream);", + convenienceMethod.BodyStatements!.ToDisplayString()); + StringAssert.Contains( + "return await this.SendAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);", + convenienceMethod.BodyStatements!.ToDisplayString()); + } + + [Test] + public void JsonLinesResponseGeneratesUnbufferedAsyncStreamingResult() + { + var itemType = InputFactory.Model( + "Info", + properties: [InputFactory.Property("desc", InputPrimitiveType.String, isRequired: true)]); + var streamType = new InputStreamingType( + "JsonlStream", + "Streaming.Jsonl.JsonlStream", + itemType, + ["application/jsonl"]); + var operation = InputFactory.Operation( + "Receive", + responses: [InputFactory.OperationResponse([200], streamType)], + bufferResponse: false); + var serviceMethod = InputFactory.BasicServiceMethod( + "Receive", + operation, + response: InputFactory.ServiceMethodResponse(streamType, null)); + var inputClient = InputFactory.Client("TestClient", methods: [serviceMethod]); + + MockHelpers.LoadMockGenerator(inputModels: () => [itemType], clients: () => [inputClient]); + var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient); + Assert.IsNotNull(client); + + var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + Assert.AreEqual(3, methodCollection.Count); + Assert.IsFalse(methodCollection.Any(method => + method.Signature.Name == "Receive" && + method.Signature.Parameters.All(parameter => parameter.Name != "options"))); + + var convenienceMethod = methodCollection.Single(method => + method.Signature.Name == "ReceiveAsync" && + method.Signature.Parameters.All(parameter => parameter.Name != "options")); + var expectedReturnType = new CSharpType( + typeof(Task<>), + new CSharpType( + typeof(AsyncStreamingClientResult<>), + ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(itemType)!)); + Assert.IsTrue(convenienceMethod.Signature.ReturnType!.Equals(expectedReturnType)); + StringAssert.Contains( + "return global::System.ClientModel.AsyncStreamingClientResult.CreateJsonLines", + convenienceMethod.BodyStatements!.ToDisplayString()); + + foreach (var protocolMethod in methodCollection.Where(method => + method.Signature.Parameters.Any(parameter => parameter.Name == "options"))) + { + StringAssert.Contains( + "message.BufferResponse = false;", + protocolMethod.BodyStatements!.ToDisplayString()); + } + } + + [Test] + public void SseResponseGeneratesUnbufferedAsyncStreamingResult() + { + var eventType = InputFactory.Model( + "Info", + properties: [InputFactory.Property("desc", InputPrimitiveType.String, isRequired: true)]); + var streamType = new InputStreamingType( + "SseStream", + "Streaming.Sse.SseStream", + eventType, + ["text/event-stream"], + streamKind: "sse", + terminalEventValue: "[DONE]"); + var operation = InputFactory.Operation( + "Receive", + responses: [InputFactory.OperationResponse([200], streamType)], + bufferResponse: false); + var serviceMethod = InputFactory.BasicServiceMethod( + "Receive", + operation, + response: InputFactory.ServiceMethodResponse(streamType, null)); + var inputClient = InputFactory.Client("TestClient", methods: [serviceMethod]); + MockHelpers.LoadMockGenerator(inputModels: () => [eventType], clients: () => [inputClient]); + var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient); + Assert.IsNotNull(client); + + var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + var convenienceMethod = methodCollection.Single(method => + method.Signature.Name == "ReceiveAsync" && + method.Signature.Parameters.All(parameter => parameter.Name != "options")); + var expectedReturnType = new CSharpType( + typeof(Task<>), + new CSharpType( + typeof(AsyncStreamingClientResult<>), + new CSharpType(typeof(SseItem<>), typeof(BinaryData)))); + Assert.IsTrue(convenienceMethod.Signature.ReturnType!.Equals(expectedReturnType)); + var body = convenienceMethod.BodyStatements!.ToDisplayString(); + StringAssert.Contains( + "return global::System.ClientModel.AsyncStreamingClientResult.CreateSse", + body); + StringAssert.Contains( + "item.Data.ToString() == \"[DONE]\"", + body); + + foreach (var protocolMethod in methodCollection.Where(method => + method.Signature.Parameters.Any(parameter => parameter.Name == "options"))) + { + StringAssert.Contains( + "message.BufferResponse = false;", + protocolMethod.BodyStatements!.ToDisplayString()); + } + } + + [Test] + public void JsonLinesPrimitiveResponseUsesValueDeserializer() + { + var streamType = new InputStreamingType( + "JsonlStream", + "Streaming.Jsonl.JsonlStream", + InputPrimitiveType.String, + ["application/jsonl"]); + var operation = InputFactory.Operation( + "Receive", + responses: [InputFactory.OperationResponse([200], streamType)], + bufferResponse: false); + var serviceMethod = InputFactory.BasicServiceMethod( + "Receive", + operation, + response: InputFactory.ServiceMethodResponse(streamType, null)); + var inputClient = InputFactory.Client("TestClient", methods: [serviceMethod]); + + MockHelpers.LoadMockGenerator(clients: () => [inputClient]); + var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient); + Assert.IsNotNull(client); + + var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + var convenienceMethod = methodCollection.Single(method => + method.Signature.Name == "ReceiveAsync" && + method.Signature.Parameters.All(parameter => parameter.Name != "options")); + StringAssert.Contains( + "global::Sample.JsonLinesBinaryContent.DeserializeValue", + convenienceMethod.BodyStatements!.ToDisplayString()); + } + + [Test] + public void OptionalJsonLinesRequestPreservesNullBody() + { + var streamType = new InputStreamingType( + "JsonlStream", + "Streaming.Jsonl.JsonlStream", + InputPrimitiveType.String, + ["application/jsonl"]); + var operation = InputFactory.Operation( + "Send", + parameters: [InputFactory.BodyParameter("stream", streamType, isRequired: false)], + responses: [InputFactory.OperationResponse([204])], + requestMediaTypes: ["application/jsonl"], + httpMethod: "POST"); + var serviceMethod = InputFactory.BasicServiceMethod( + "Send", + operation, + parameters: + [ + InputFactory.MethodParameter( + "stream", + streamType, + location: InputRequestLocation.Body, + isRequired: false) + ]); + var inputClient = InputFactory.Client("TestClient", methods: [serviceMethod]); + + MockHelpers.LoadMockGenerator(clients: () => [inputClient]); + var client = ScmCodeModelGenerator.Instance.TypeFactory.CreateClient(inputClient); + Assert.IsNotNull(client); + + var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + var convenienceMethod = methodCollection.Single(method => + method.Signature.Name == "SendAsync" && + method.Signature.Parameters.All(parameter => parameter.Name != "content")); + StringAssert.Contains( + "(stream == null) ? null : new global::Sample.JsonLinesBinaryContent(stream)", + convenienceMethod.BodyStatements!.ToDisplayString()); + } + // Validate that the default method collection consists of the expected method kind(s) [TestCaseSource(nameof(DefaultCSharpMethodCollectionTestCases))] public void TestDefaultCSharpMethodCollection(InputServiceMethod serviceMethod) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputStreamingType.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputStreamingType.cs new file mode 100644 index 00000000000..803c75098e3 --- /dev/null +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputStreamingType.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; + +namespace Microsoft.TypeSpec.Generator.Input +{ + /// + /// Represents a sequence of values streamed over the wire. + /// + public sealed class InputStreamingType : InputType + { + public InputStreamingType( + string name, + string crossLanguageDefinitionId, + InputType valueType, + IReadOnlyList contentTypes, + string streamKind = "jsonl", + string? terminalEventType = null, + string? terminalEventValue = null) + : base(name) + { + CrossLanguageDefinitionId = crossLanguageDefinitionId; + ValueType = valueType; + ContentTypes = contentTypes; + StreamKind = streamKind; + TerminalEventType = terminalEventType; + TerminalEventValue = terminalEventValue; + } + + public string CrossLanguageDefinitionId { get; internal set; } + public InputType ValueType { get; internal set; } + public IReadOnlyList ContentTypes { get; internal set; } + public string StreamKind { get; internal set; } + public string? TerminalEventType { get; internal set; } + public string? TerminalEventValue { get; internal set; } + } +} diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputStreamingTypeConverter.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputStreamingTypeConverter.cs new file mode 100644 index 00000000000..c470ec2e6f1 --- /dev/null +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputStreamingTypeConverter.cs @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Microsoft.TypeSpec.Generator.Input +{ + internal sealed class InputStreamingTypeConverter : JsonConverter + { + private readonly TypeSpecReferenceHandler _referenceHandler; + + public InputStreamingTypeConverter(TypeSpecReferenceHandler referenceHandler) + { + _referenceHandler = referenceHandler; + } + + public override InputStreamingType? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + => reader.ReadReferenceAndResolve(_referenceHandler.CurrentResolver) + ?? CreateStreamingType(ref reader, null, null, options, _referenceHandler.CurrentResolver); + + public override void Write(Utf8JsonWriter writer, InputStreamingType value, JsonSerializerOptions options) + => throw new NotSupportedException("Writing not supported"); + + public static InputStreamingType CreateStreamingType( + ref Utf8JsonReader reader, + string? id, + string? name, + JsonSerializerOptions options, + ReferenceResolver resolver) + { + string? crossLanguageDefinitionId = null; + InputType? valueType = null; + IReadOnlyList? contentTypes = null; + string? streamKind = null; + string? terminalEventType = null; + string? terminalEventValue = null; + + if (id == null) + { + reader.TryReadReferenceId(ref id); + } + + id = id ?? throw new JsonException(); + var streamingType = new InputStreamingType(name ?? "Stream", string.Empty, null!, []); + resolver.AddReference(id, streamingType); + + while (reader.TokenType != JsonTokenType.EndObject) + { + var isKnownProperty = reader.TryReadReferenceId(ref id) + || reader.TryReadString("name", ref name) + || reader.TryReadString("crossLanguageDefinitionId", ref crossLanguageDefinitionId) + || reader.TryReadComplexType("valueType", options, ref valueType) + || reader.TryReadComplexType("contentTypes", options, ref contentTypes) + || reader.TryReadString("streamKind", ref streamKind) + || reader.TryReadString("terminalEventType", ref terminalEventType) + || reader.TryReadString("terminalEventValue", ref terminalEventValue); + + if (!isKnownProperty) + { + reader.SkipProperty(); + } + } + + streamingType.Name = name ?? "Stream"; + streamingType.CrossLanguageDefinitionId = crossLanguageDefinitionId ?? string.Empty; + streamingType.ValueType = valueType ?? throw new JsonException("InputStreamingType must have a valueType."); + streamingType.ContentTypes = contentTypes ?? []; + streamingType.StreamKind = streamKind ?? "jsonl"; + streamingType.TerminalEventType = terminalEventType; + streamingType.TerminalEventValue = terminalEventValue; + return streamingType; + } + } +} diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputTypeConverter.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputTypeConverter.cs index eef96ae8571..81bd3e5dce3 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputTypeConverter.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputTypeConverter.cs @@ -52,6 +52,7 @@ private static InputType CreateInputType(ref Utf8JsonReader reader, JsonSerializ private const string EnumKind = "enum"; private const string EnumValueKind = "enumvalue"; private const string ArrayKind = "array"; + private const string StreamingKind = "streaming"; private const string DictionaryKind = "dict"; private const string NullableKind = "nullable"; private const string UtcDateTimeKind = "utcDateTime"; @@ -67,6 +68,7 @@ private static InputType CreateInputType(ref Utf8JsonReader reader, JsonSerializ EnumKind => InputEnumTypeConverter.CreateEnumType(ref reader, id, name, options, resolver), EnumValueKind => InputEnumTypeValueConverter.CreateEnumTypeValue(ref reader, id, name, options, resolver), ArrayKind => InputArrayTypeConverter.CreateListType(ref reader, id, name, options, resolver), + StreamingKind => InputStreamingTypeConverter.CreateStreamingType(ref reader, id, name, options, resolver), DictionaryKind => InputDictionaryTypeConverter.CreateDictionaryType(ref reader, id, options, resolver), UtcDateTimeKind or OffsetDateTimeKind => InputDateTimeTypeConverter.CreateDateTimeType(ref reader, id, name, options, resolver), DurationKind => InputDurationTypeConverter.CreateDurationType(ref reader, id, name, options, resolver), diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/TypeSpecSerialization.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/TypeSpecSerialization.cs index 7a9df1f37bd..36893cf6c44 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/TypeSpecSerialization.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/TypeSpecSerialization.cs @@ -27,6 +27,7 @@ public static class TypeSpecSerialization new JsonStringEnumConverter(JsonNamingPolicy.CamelCase), new InputTypeConverter(referenceHandler), new InputArrayTypeConverter(referenceHandler), + new InputStreamingTypeConverter(referenceHandler), new InputDictionaryTypeConverter(referenceHandler), new InputEnumTypeConverter(referenceHandler), new InputEnumTypeValueConverter(referenceHandler), diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/CSharpType.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/CSharpType.cs index 0678df21108..6bcf94baae8 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/CSharpType.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/CSharpType.cs @@ -48,7 +48,7 @@ public class CSharpType public bool IsReadOnlyDictionary => _isReadOnlyDictionary ??= TypeIsReadOnlyDictionary(); internal bool IsReadWriteDictionary => _isReadWriteDictionary ??= TypeIsReadWriteDictionary(); internal bool IsIEnumerableOfT => _isIEnumerableOfT ??= TypeIsIEnumerableOfT(); - internal bool IsIAsyncEnumerableOfT => _isIAsyncEnumerableOfT ??= TypeIsIAsyncEnumerableOfT(); + public bool IsIAsyncEnumerableOfT => _isIAsyncEnumerableOfT ??= TypeIsIAsyncEnumerableOfT(); internal bool ContainsBinaryData => _containsBinaryData ??= TypeContainsBinaryData(); /// diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/NewProjectScaffolding.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/NewProjectScaffolding.cs index b3221710da4..1d490a7a81f 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/NewProjectScaffolding.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/NewProjectScaffolding.cs @@ -104,7 +104,7 @@ protected virtual string GetSourceProjectFileContent() private static readonly IReadOnlyList _unbrandedDependencyPackages = new CSharpProjectWriter.CSProjDependencyPackage[] { - new("System.ClientModel", "1.14.0"), + new("System.ClientModel", "1.15.0-beta.1"), }; protected virtual string GetSolutionFileContent() diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Properties/launchSettings.json b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Properties/launchSettings.json index 695ba6fdd2a..c3e3f6c683c 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Properties/launchSettings.json +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Properties/launchSettings.json @@ -215,6 +215,16 @@ "commandName": "Executable", "executablePath": "$(SolutionDir)/../dist/generator/Microsoft.TypeSpec.Generator.exe" }, + "http-streaming-jsonl": { + "commandLineArgs": "$(SolutionDir)/TestProjects/Spector/http/streaming/jsonl -g StubLibraryGenerator", + "commandName": "Executable", + "executablePath": "$(SolutionDir)/../dist/generator/Microsoft.TypeSpec.Generator.exe" + }, + "http-streaming-sse": { + "commandLineArgs": "$(SolutionDir)/TestProjects/Spector/http/streaming/sse -g StubLibraryGenerator", + "commandName": "Executable", + "executablePath": "$(SolutionDir)/../dist/generator/Microsoft.TypeSpec.Generator.exe" + }, "http-type-array": { "commandLineArgs": "$(SolutionDir)/TestProjects/Spector/http/type/array -g StubLibraryGenerator", "commandName": "Executable", diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/TypeFactory.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/TypeFactory.cs index 07065943b7b..46106c02122 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/TypeFactory.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/TypeFactory.cs @@ -110,6 +110,12 @@ protected internal TypeFactory() var arrayInput = CreateCSharpType(listType.ValueType); type = arrayInput != null ? new CSharpType(typeof(IList<>), arrayInput) : null; break; + case InputStreamingType streamingType: + var streamingValueType = CreateCSharpType(streamingType.ValueType); + type = streamingValueType != null + ? new CSharpType(typeof(IAsyncEnumerable<>), streamingValueType) + : null; + break; case InputDictionaryType dictionaryType: var inputValueType = CreateCSharpType(dictionaryType.ValueType); type = inputValueType != null ? new CSharpType(typeof(IDictionary<,>), typeof(string), inputValueType) : null; diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Utilities/ExternalTypeReferenceResolver.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Utilities/ExternalTypeReferenceResolver.cs index f7849a27c78..cca14946e4c 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Utilities/ExternalTypeReferenceResolver.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Utilities/ExternalTypeReferenceResolver.cs @@ -311,68 +311,80 @@ private static void CollectExternalTypes(InputLibrary library, IDictionary visited, IDictionary collected) { - if (type == null || !visited.Add(type)) + while (true) { - return; - } - - if (type.External != null - && !string.IsNullOrEmpty(type.External.Identity) - && !string.IsNullOrEmpty(type.External.Package)) - { - var key = $"{type.External.Package}|{type.External.Identity}|{type.External.MinVersion ?? string.Empty}"; - if (!collected.ContainsKey(key)) + if (type == null || !visited.Add(type)) { - collected[key] = type.External; + return; } - } - switch (type) - { - case InputModelType model: - foreach (var prop in model.Properties) - { - VisitType(prop.Type, visited, collected); - } - if (model.AdditionalProperties != null) - { - VisitType(model.AdditionalProperties, visited, collected); - } - if (model.BaseModel != null) - { - VisitType(model.BaseModel, visited, collected); - } - foreach (var derived in model.DerivedModels) - { - VisitType(derived, visited, collected); - } - foreach (var subtype in model.DiscriminatedSubtypes.Values) - { - VisitType(subtype, visited, collected); - } - break; - case InputArrayType array: - VisitType(array.ValueType, visited, collected); - break; - case InputDictionaryType dictionary: - VisitType(dictionary.KeyType, visited, collected); - VisitType(dictionary.ValueType, visited, collected); - break; - case InputUnionType union: - foreach (var variant in union.VariantTypes) + if (type.External != null && !string.IsNullOrEmpty(type.External.Identity) && !string.IsNullOrEmpty(type.External.Package)) + { + var key = $"{type.External.Package}|{type.External.Identity}|{type.External.MinVersion ?? string.Empty}"; + if (!collected.ContainsKey(key)) { - VisitType(variant, visited, collected); + collected[key] = type.External; } - break; - case InputNullableType nullable: - VisitType(nullable.Type, visited, collected); - break; - case InputLiteralType literal: - VisitType(literal.ValueType, visited, collected); - break; - case InputEnumType enumType: - VisitType(enumType.ValueType, visited, collected); - break; + } + + switch (type) + { + case InputModelType model: + foreach (var prop in model.Properties) + { + VisitType(prop.Type, visited, collected); + } + + if (model.AdditionalProperties != null) + { + VisitType(model.AdditionalProperties, visited, collected); + } + + if (model.BaseModel != null) + { + VisitType(model.BaseModel, visited, collected); + } + + foreach (var derived in model.DerivedModels) + { + VisitType(derived, visited, collected); + } + + foreach (var subtype in model.DiscriminatedSubtypes.Values) + { + VisitType(subtype, visited, collected); + } + + break; + case InputArrayType array: + type = array.ValueType; + continue; + case InputStreamingType streaming: + type = streaming.ValueType; + continue; + case InputDictionaryType dictionary: + VisitType(dictionary.KeyType, visited, collected); + type = dictionary.ValueType; + continue; + case InputUnionType union: + foreach (var variant in union.VariantTypes) + { + VisitType(variant, visited, collected); + } + + break; + case InputNullableType nullable: + type = nullable.Type; + continue; + case InputLiteralType literal: + type = literal.ValueType; + continue; + case InputEnumType enumType: + type = enumType.ValueType; + continue; + } + + break; } } } diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/common/InputFactory.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/common/InputFactory.cs index a61d51467b0..3bd508eb2e7 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/common/InputFactory.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/common/InputFactory.cs @@ -732,7 +732,8 @@ public static InputOperation Operation( bool generateConvenienceMethod = true, string? ns = null, bool isExactName = false, - bool generateProtocolMethod = true) + bool generateProtocolMethod = true, + bool bufferResponse = true) { var operation = new InputOperation( name, @@ -748,7 +749,7 @@ public static InputOperation Operation( path, null, requestMediaTypes is null ? null : [.. requestMediaTypes], - false, + bufferResponse, generateProtocolMethod, generateConvenienceMethod, name, diff --git a/packages/http-client-csharp/generator/Packages.Data.props b/packages/http-client-csharp/generator/Packages.Data.props index 28d56b347a2..ac0a18bfb66 100644 --- a/packages/http-client-csharp/generator/Packages.Data.props +++ b/packages/http-client-csharp/generator/Packages.Data.props @@ -14,9 +14,9 @@ - - + + - + diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Sample-TypeSpec/src/SampleTypeSpec.csproj b/packages/http-client-csharp/generator/TestProjects/Local/Sample-TypeSpec/src/SampleTypeSpec.csproj index 1ae5814b698..bd9f1818f74 100644 --- a/packages/http-client-csharp/generator/TestProjects/Local/Sample-TypeSpec/src/SampleTypeSpec.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Local/Sample-TypeSpec/src/SampleTypeSpec.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Jsonl/JsonlTests.cs b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Jsonl/JsonlTests.cs new file mode 100644 index 00000000000..d7b21f04f4a --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Jsonl/JsonlTests.cs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Threading.Tasks; +using NUnit.Framework; +using Streaming.Jsonl; +using Streaming.Jsonl._Basic; + +namespace TestProjects.Spector.Tests.Http.Streaming.Jsonl +{ + public class JsonlTests : SpectorTestBase + { + [SpectorTest] + public Task Send() => Test(async (host) => + { + var client = new JsonlClient(host, null).GetBasicClient(); + var response = await client.SendAsync(GetValues()); + Assert.AreEqual(204, response.GetRawResponse().Status); + }); + + [SpectorTest] + public Task Receive() => Test(async (host) => + { + var client = new JsonlClient(host, null).GetBasicClient(); + await using var response = await client.ReceiveAsync(); + var descriptions = new List(); + await foreach (var value in response) + { + descriptions.Add(value.Desc); + } + + CollectionAssert.AreEqual(new[] { "one", "two", "three" }, descriptions); + }); + + private static async IAsyncEnumerable GetValues() + { + await Task.Yield(); + yield return new Info("one"); + yield return new Info("two"); + yield return new Info("three"); + } + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs new file mode 100644 index 00000000000..f6bfa1387dd --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using NUnit.Framework; +using Streaming.Sse; +using Streaming.Sse._Retrieve; + +namespace TestProjects.Spector.Tests.Http.Streaming.Sse +{ + public class SseTests : SpectorTestBase + { + [SpectorTest] + public Task Unnamed() => Test(async (host) => + { + var client = new SseClient(host, null).GetUnnamedClient(); + await using var response = await client.ReceiveAsync(); + var descriptions = new List(); + await foreach (var item in response) + { + Assert.AreEqual("message", item.EventType); + using var document = JsonDocument.Parse(item.Data.ToMemory()); + descriptions.Add(document.RootElement.GetProperty("desc").GetString()!); + } + + CollectionAssert.AreEqual(new[] { "one", "two", "three" }, descriptions); + }); + + [SpectorTest] + public Task Named() => Test(async (host) => + { + var client = new SseClient(host, null).GetNamedClient(); + await using var response = await client.ReceiveAsync(); + var events = new List<(string Type, string Value)>(); + await foreach (var item in response) + { + using var document = JsonDocument.Parse(item.Data.ToMemory()); + var value = item.EventType == "responseCreated" + ? document.RootElement.GetProperty("id").GetString()! + : document.RootElement.GetProperty("delta").GetString()!; + events.Add((item.EventType, value)); + } + + CollectionAssert.AreEqual( + new[] + { + ("responseCreated", "resp_1"), + ("responseDelta", "Hello"), + ("responseDelta", " world"), + }, + events); + }); + + [SpectorTest] + public Task Retrieve() => Test(async (host) => + { + var client = new SseClient(host, null).GetRetrieveClient(); + await using var response = await client.StreamAsync( + new RetrievalRequest("what is typespec?")); + var events = new List<(string Type, string Value)>(); + await foreach (var item in response) + { + using var document = JsonDocument.Parse(item.Data.ToMemory()); + var value = item.EventType == "partialResult" + ? document.RootElement.GetProperty("text").GetString()! + : string.Join( + ",", + document.RootElement.GetProperty("references") + .EnumerateArray() + .Select(element => element.GetString())); + events.Add((item.EventType, value)); + } + + CollectionAssert.AreEqual( + new[] + { + ("partialResult", "partial one"), + ("partialResult", "partial two"), + ("finalResult", "doc1,doc2"), + }, + events); + }); + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Infrastructure/TestServerBase.cs b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Infrastructure/TestServerBase.cs index f033e7f811d..229ee024b49 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Infrastructure/TestServerBase.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Infrastructure/TestServerBase.cs @@ -41,8 +41,11 @@ public TestServerBase(string processPath, string processArguments) var indexOfPort = s?.IndexOf(portPhrase); if (indexOfPort > 0) { - Port = s!.Substring(indexOfPort.Value + portPhrase.Length).Trim(); - Host = new Uri($"http://localhost:{Port}"); + var address = s!.Substring(indexOfPort.Value + portPhrase.Length).Trim(); + Host = int.TryParse(address, out var port) + ? new Uri($"http://localhost:{port}") + : new Uri($"http://{address}"); + Port = Host.Port.ToString(); Client = new HttpClient { BaseAddress = Host diff --git a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj index 8692c20c097..b3e10449ea3 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/TestProjects.Spector.Tests.csproj @@ -62,6 +62,8 @@ + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/api-key/src/Authentication.ApiKey.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/api-key/src/Authentication.ApiKey.csproj index 6afc19b12b6..07f8dff6c81 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/api-key/src/Authentication.ApiKey.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/api-key/src/Authentication.ApiKey.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/http/custom/src/Authentication.Http.Custom.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/http/custom/src/Authentication.Http.Custom.csproj index da32df2384d..40941e845f1 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/http/custom/src/Authentication.Http.Custom.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/http/custom/src/Authentication.Http.Custom.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/oauth2/src/Authentication.OAuth2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/oauth2/src/Authentication.OAuth2.csproj index e49a2f273c9..1cbed924e09 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/oauth2/src/Authentication.OAuth2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/oauth2/src/Authentication.OAuth2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/union/src/Authentication.Union.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/union/src/Authentication.Union.csproj index 20d5d1ee4e5..71ca3ac6a4d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/union/src/Authentication.Union.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/union/src/Authentication.Union.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/client-operation-group/src/Client.Structure.Service.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/client-operation-group/src/Client.Structure.Service.csproj index 098b264a2db..0f2c57c832d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/client-operation-group/src/Client.Structure.Service.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/client-operation-group/src/Client.Structure.Service.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/default/src/Client.Structure.Service.Default.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/default/src/Client.Structure.Service.Default.csproj index 1e3efad871f..9bb66568129 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/default/src/Client.Structure.Service.Default.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/default/src/Client.Structure.Service.Default.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/multi-client/src/Client.Structure.Service.Multi.Client.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/multi-client/src/Client.Structure.Service.Multi.Client.csproj index 6be93f84deb..3c172a1f919 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/multi-client/src/Client.Structure.Service.Multi.Client.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/multi-client/src/Client.Structure.Service.Multi.Client.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/renamed-operation/src/Client.Structure.Service.Renamed.Operation.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/renamed-operation/src/Client.Structure.Service.Renamed.Operation.csproj index f42ee447848..18849bb6754 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/renamed-operation/src/Client.Structure.Service.Renamed.Operation.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/renamed-operation/src/Client.Structure.Service.Renamed.Operation.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/two-operation-group/src/Client.Structure.Service.TwoOperationGroup.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/two-operation-group/src/Client.Structure.Service.TwoOperationGroup.csproj index 6983797acd3..d7fc67ea27d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/two-operation-group/src/Client.Structure.Service.TwoOperationGroup.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/two-operation-group/src/Client.Structure.Service.TwoOperationGroup.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/documentation/src/Documentation.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/documentation/src/Documentation.csproj index 1b50bcabfcd..66908fe3eb8 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/documentation/src/Documentation.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/documentation/src/Documentation.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/array/src/Encode.Array.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/array/src/Encode.Array.csproj index 0df568f3eb0..2cfc0ffc5e5 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/array/src/Encode.Array.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/array/src/Encode.Array.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/bytes/src/Encode.Bytes.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/bytes/src/Encode.Bytes.csproj index f76f26640d3..dc47386a62b 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/bytes/src/Encode.Bytes.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/bytes/src/Encode.Bytes.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/datetime/src/Encode.Datetime.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/datetime/src/Encode.Datetime.csproj index b36c24f5145..50f5b355a4d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/datetime/src/Encode.Datetime.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/datetime/src/Encode.Datetime.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/duration/src/Encode.Duration.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/duration/src/Encode.Duration.csproj index bc1e0785155..08ac4cc0550 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/duration/src/Encode.Duration.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/duration/src/Encode.Duration.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/numeric/src/Encode.Numeric.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/numeric/src/Encode.Numeric.csproj index 8aad7aa37f9..2c5aebaca57 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/numeric/src/Encode.Numeric.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/encode/numeric/src/Encode.Numeric.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/basic/src/Parameters.Basic.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/basic/src/Parameters.Basic.csproj index 886b60bde4c..17ecca07b5d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/basic/src/Parameters.Basic.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/basic/src/Parameters.Basic.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-optionality/src/Parameters.BodyOptionality.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-optionality/src/Parameters.BodyOptionality.csproj index 2e73ecb18f8..2cb1848783a 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-optionality/src/Parameters.BodyOptionality.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-optionality/src/Parameters.BodyOptionality.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-root/src/Parameters.BodyRoot.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-root/src/Parameters.BodyRoot.csproj index dc8fb18480d..beeaedd93cd 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-root/src/Parameters.BodyRoot.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-root/src/Parameters.BodyRoot.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/collection-format/src/Parameters.CollectionFormat.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/collection-format/src/Parameters.CollectionFormat.csproj index 7a3109a76a4..6fedd81b9c5 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/collection-format/src/Parameters.CollectionFormat.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/collection-format/src/Parameters.CollectionFormat.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/path/src/Parameters.Path.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/path/src/Parameters.Path.csproj index 59c0aa38e81..48819a85154 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/path/src/Parameters.Path.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/path/src/Parameters.Path.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/query/src/Parameters.Query.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/query/src/Parameters.Query.csproj index f673d20ac63..37138ae1039 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/query/src/Parameters.Query.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/query/src/Parameters.Query.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/spread/src/Parameters.Spread.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/spread/src/Parameters.Spread.csproj index cd59356befa..8c86404ca06 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/spread/src/Parameters.Spread.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/spread/src/Parameters.Spread.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/content-negotiation/src/Payload.ContentNegotiation.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/content-negotiation/src/Payload.ContentNegotiation.csproj index 619d41348c9..d91508a57a1 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/content-negotiation/src/Payload.ContentNegotiation.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/content-negotiation/src/Payload.ContentNegotiation.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/head/src/Payload.Head.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/head/src/Payload.Head.csproj index f6b4124caef..79c47ad89ca 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/head/src/Payload.Head.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/head/src/Payload.Head.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/json-merge-patch/src/Payload.JsonMergePatch.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/json-merge-patch/src/Payload.JsonMergePatch.csproj index d817f50ca6c..6e170f01c1c 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/json-merge-patch/src/Payload.JsonMergePatch.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/json-merge-patch/src/Payload.JsonMergePatch.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/media-type/src/Payload.MediaType.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/media-type/src/Payload.MediaType.csproj index b08e4bb9297..294b4181a64 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/media-type/src/Payload.MediaType.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/media-type/src/Payload.MediaType.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/multipart/src/Payload.MultiPart.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/multipart/src/Payload.MultiPart.csproj index 56cbcd39aac..3a239b569ea 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/multipart/src/Payload.MultiPart.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/multipart/src/Payload.MultiPart.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/pageable/src/Payload.Pageable.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/pageable/src/Payload.Pageable.csproj index 508be6c4541..011794e2cd5 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/pageable/src/Payload.Pageable.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/pageable/src/Payload.Pageable.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Payload.Xml.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Payload.Xml.csproj index c8fd11efc71..e0452353cdd 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Payload.Xml.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/src/Payload.Xml.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v1/src/Resiliency.SrvDriven.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v1/src/Resiliency.SrvDriven.V1.csproj index bd26620e222..38404f40b45 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v1/src/Resiliency.SrvDriven.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v1/src/Resiliency.SrvDriven.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v2/src/Resiliency.SrvDriven.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v2/src/Resiliency.SrvDriven.V2.csproj index d6d174fdb2d..487cee6aef7 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v2/src/Resiliency.SrvDriven.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v2/src/Resiliency.SrvDriven.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/response/status-code-range/src/Response.StatusCodeRange.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/response/status-code-range/src/Response.StatusCodeRange.csproj index a7aad20dde0..50e787f24b3 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/response/status-code-range/src/Response.StatusCodeRange.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/response/status-code-range/src/Response.StatusCodeRange.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/routes/src/Routes.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/routes/src/Routes.csproj index a8458bfe1a0..d291a4ca916 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/routes/src/Routes.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/routes/src/Routes.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/serialization/encoded-name/json/src/Serialization.EncodedName.Json.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/serialization/encoded-name/json/src/Serialization.EncodedName.Json.csproj index 91bd0670954..09210a9a413 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/serialization/encoded-name/json/src/Serialization.EncodedName.Json.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/serialization/encoded-name/json/src/Serialization.EncodedName.Json.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/endpoint/not-defined/src/Server.Endpoint.NotDefined.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/endpoint/not-defined/src/Server.Endpoint.NotDefined.csproj index 2cf24e67d0f..95aded064ab 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/endpoint/not-defined/src/Server.Endpoint.NotDefined.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/endpoint/not-defined/src/Server.Endpoint.NotDefined.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/multiple/src/Server.Path.Multiple.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/multiple/src/Server.Path.Multiple.csproj index 129b74d6ca0..869795b6ee1 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/multiple/src/Server.Path.Multiple.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/multiple/src/Server.Path.Multiple.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/single/src/Server.Path.Single.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/single/src/Server.Path.Single.csproj index 4877707f9cf..403cf3fc9a2 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/single/src/Server.Path.Single.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/single/src/Server.Path.Single.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/not-versioned/src/Server.Versions.NotVersioned.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/not-versioned/src/Server.Versions.NotVersioned.csproj index 7cd6f2e93a8..40827db4dd9 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/not-versioned/src/Server.Versions.NotVersioned.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/not-versioned/src/Server.Versions.NotVersioned.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/versioned/src/Server.Versions.Versioned.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/versioned/src/Server.Versions.Versioned.csproj index 09782bca360..70a1016f147 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/versioned/src/Server.Versions.Versioned.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/versioned/src/Server.Versions.Versioned.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/service/multiple-services/src/Service.MultipleServices.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/service/multiple-services/src/Service.MultipleServices.csproj index 6f1fd8177e0..b8c86bf4d4d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/service/multiple-services/src/Service.MultipleServices.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/service/multiple-services/src/Service.MultipleServices.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/conditional-request/src/SpecialHeaders.ConditionalRequest.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/conditional-request/src/SpecialHeaders.ConditionalRequest.csproj index 48aef20165f..7272ccfdc43 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/conditional-request/src/SpecialHeaders.ConditionalRequest.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/conditional-request/src/SpecialHeaders.ConditionalRequest.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/repeatability/src/SpecialHeaders.Repeatability.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/repeatability/src/SpecialHeaders.Repeatability.csproj index 2a10e361969..6ba1d1cf2d0 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/repeatability/src/SpecialHeaders.Repeatability.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/repeatability/src/SpecialHeaders.Repeatability.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-words/src/SpecialWords.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-words/src/SpecialWords.csproj index 20668ae1449..cde13aa0736 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/special-words/src/SpecialWords.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/special-words/src/SpecialWords.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Configuration.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Configuration.json new file mode 100644 index 00000000000..6759355fc55 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Configuration.json @@ -0,0 +1,3 @@ +{ + "package-name": "Streaming.Jsonl" +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.NuGet.targets b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.NuGet.targets new file mode 100644 index 00000000000..9df53f09f6f --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.NuGet.targets @@ -0,0 +1,6 @@ + + + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.slnx b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.slnx new file mode 100644 index 00000000000..1bed5659651 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/Streaming.Jsonl.slnx @@ -0,0 +1,3 @@ + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs new file mode 100644 index 00000000000..88189d6bfb4 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace Streaming.Jsonl._Basic +{ + public partial class Basic + { + protected Basic() => throw null; + + internal Basic(ClientPipeline pipeline, Uri endpoint) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual ClientResult Send(BinaryContent content, RequestOptions options = null) => throw null; + + public virtual Task SendAsync(BinaryContent content, RequestOptions options = null) => throw null; + + public virtual Task SendAsync(IAsyncEnumerable stream, CancellationToken cancellationToken = default) => throw null; + + public virtual ClientResult Receive(RequestOptions options) => throw null; + + public virtual Task ReceiveAsync(RequestOptions options) => throw null; + + public virtual Task> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClient.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClient.cs new file mode 100644 index 00000000000..c3631096e25 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClient.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Streaming.Jsonl._Basic; + +namespace Streaming.Jsonl +{ + public partial class JsonlClient + { + public JsonlClient() : this(new Uri("http://localhost:3000"), new JsonlClientOptions()) => throw null; + + internal JsonlClient(AuthenticationPolicy authenticationPolicy, Uri endpoint, JsonlClientOptions options) => throw null; + + public JsonlClient(Uri endpoint, JsonlClientOptions options) : this(null, endpoint, options) => throw null; + + [Experimental("SCME0002")] + public JsonlClient(JsonlClientSettings settings) : this(AuthenticationPolicy.Create(settings), settings?.Endpoint, settings?.Options) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual Basic GetBasicClient() => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientOptions.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientOptions.cs new file mode 100644 index 00000000000..ca587048a82 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientOptions.cs @@ -0,0 +1,18 @@ +// + +#nullable disable + +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Configuration; + +namespace Streaming.Jsonl +{ + public partial class JsonlClientOptions : ClientPipelineOptions + { + public JsonlClientOptions() => throw null; + + [Experimental("SCME0002")] + internal JsonlClientOptions(IConfigurationSection section) : base(section) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientSettings.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientSettings.cs new file mode 100644 index 00000000000..2a2ff69d3f2 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/JsonlClientSettings.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Configuration; + +namespace Streaming.Jsonl +{ + [Experimental("SCME0002")] + public partial class JsonlClientSettings : ClientSettings + { + public Uri Endpoint + { + get => throw null; + set => throw null; + } + + public JsonlClientOptions Options + { + get => throw null; + set => throw null; + } + + protected override void BindCore(IConfigurationSection section) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.Serialization.cs new file mode 100644 index 00000000000..ede90d504a2 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace Streaming.Jsonl._Basic +{ + public partial class Info : IJsonModel + { + internal Info() => throw null; + + protected virtual Info PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) => throw null; + + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) => throw null; + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => throw null; + + Info IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => throw null; + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => throw null; + + public static explicit operator Info(ClientResult result) => throw null; + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + Info IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + + protected virtual Info JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.cs new file mode 100644 index 00000000000..7c0a717336e --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/Info.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +namespace Streaming.Jsonl._Basic +{ + public partial class Info + { + public Info(string desc) => throw null; + + public string Desc + { + get => throw null; + set => throw null; + } + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/StreamingJsonlContext.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/StreamingJsonlContext.cs new file mode 100644 index 00000000000..26545300903 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Models/StreamingJsonlContext.cs @@ -0,0 +1,14 @@ +// + +#nullable disable + +using System.ClientModel.Primitives; +using Streaming.Jsonl._Basic; + +namespace Streaming.Jsonl +{ + [ModelReaderWriterBuildable(typeof(Info))] + public partial class StreamingJsonlContext : ModelReaderWriterContext + { + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs new file mode 100644 index 00000000000..d66e611a2f0 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs @@ -0,0 +1,14 @@ +// + +#nullable disable + +using System; +using Streaming.Jsonl._Basic; + +namespace Streaming.Jsonl +{ + public static partial class StreamingJsonlModelFactory + { + public static Info Info(string desc = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/schema/ConfigurationSchema.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/schema/ConfigurationSchema.json new file mode 100644 index 00000000000..cd18484e8b4 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/schema/ConfigurationSchema.json @@ -0,0 +1,40 @@ +{ + "type": "object", + "properties": { + "Clients": { + "type": "object", + "properties": { + "JsonlClient": { + "type": "object", + "description": "Configuration for JsonlClient.", + "properties": { + "Endpoint": { + "type": "string", + "format": "uri", + "description": "Gets or sets the Endpoint." + }, + "Credential": { + "$ref": "#/definitions/credential" + }, + "Options": { + "$ref": "#/definitions/jsonlClientOptions" + } + } + } + }, + "additionalProperties": { + "type": "object", + "description": "Configuration for a named client instance." + } + } + }, + "definitions": { + "jsonlClientOptions": { + "allOf": [ + { + "$ref": "#/definitions/options" + } + ] + } + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Streaming.Jsonl.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Streaming.Jsonl.csproj new file mode 100644 index 00000000000..24e21a54fe7 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Streaming.Jsonl.csproj @@ -0,0 +1,20 @@ + + + This is the Streaming.Jsonl client library for developing .NET applications with rich experience. + SDK Code Generation Streaming.Jsonl + 1.0.0-beta.1 + Streaming.Jsonl + netstandard2.0;net8.0 + latest + true + + + + + + + + + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json new file mode 100644 index 00000000000..692ad40fc9c --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json @@ -0,0 +1,557 @@ +{ + "name": "Streaming.Jsonl", + "apiVersions": [], + "enums": [], + "constants": [ + { + "$id": "1", + "kind": "constant", + "name": "SendRequestContentType", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "2", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "application/jsonl", + "decorators": [], + "isExactName": false + }, + { + "$id": "3", + "kind": "constant", + "name": "JsonlStreamInfoContentType", + "namespace": "TypeSpec.Http.Streams", + "usage": "None", + "valueType": { + "$id": "4", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "application/jsonl", + "decorators": [], + "isExactName": false + }, + { + "$id": "5", + "kind": "constant", + "name": "SendRequestContentType1", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "6", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "application/jsonl", + "decorators": [], + "isExactName": false + }, + { + "$id": "7", + "kind": "constant", + "name": "SendRequestContentType2", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "8", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "application/jsonl", + "decorators": [], + "isExactName": false + } + ], + "models": [ + { + "$id": "9", + "kind": "model", + "name": "Info", + "namespace": "Streaming.Jsonl.Basic", + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.Info", + "usage": "Input,Output,Json", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "10", + "kind": "property", + "name": "desc", + "type": { + "$id": "11", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.Info.desc", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "12", + "kind": "model", + "name": "JsonlStreamInfo", + "namespace": "TypeSpec.Http.Streams", + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream", + "usage": "None", + "doc": "", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "13", + "kind": "property", + "name": "contentType", + "type": { + "$ref": "3" + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.contentType", + "serializationOptions": {}, + "isHttpMetadata": true, + "isExactName": false + }, + { + "$id": "14", + "kind": "property", + "name": "body", + "type": { + "$id": "15", + "kind": "bytes", + "name": "bytes", + "crossLanguageDefinitionId": "", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.body", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + } + ], + "clients": [ + { + "$id": "16", + "kind": "client", + "name": "JsonlClient", + "isExactName": false, + "namespace": "Streaming.Jsonl", + "doc": "Test of jsonl streaming.", + "methods": [], + "parameters": [ + { + "$id": "17", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "18", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "19", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Jsonl.endpoint", + "isExactName": false + } + ], + "initializedBy": 1, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Jsonl", + "apiVersions": [], + "children": [ + { + "$id": "20", + "kind": "client", + "name": "Basic", + "isExactName": false, + "namespace": "Streaming.Jsonl.Basic", + "methods": [ + { + "$id": "21", + "kind": "basic", + "name": "send", + "isExactName": false, + "accessibility": "public", + "apiVersions": [], + "operation": { + "$id": "22", + "name": "send", + "isExactName": false, + "resourceName": "Basic", + "accessibility": "public", + "parameters": [ + { + "$id": "23", + "kind": "header", + "name": "contentType", + "serializedName": "Content-Type", + "type": { + "$ref": "1" + }, + "isApiVersion": false, + "optional": false, + "isContentType": true, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.contentType", + "methodParameterSegments": [ + { + "$id": "24", + "kind": "method", + "name": "stream", + "serializedName": "stream", + "type": { + "$id": "25", + "kind": "streaming", + "name": "JsonlStreamInfo", + "valueType": { + "$ref": "9" + }, + "contentTypes": [ + "application/jsonl" + ], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream" + }, + "location": "Body", + "isApiVersion": false, + "optional": false, + "scope": "Method", + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.send.stream", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + }, + { + "$id": "26", + "kind": "method", + "name": "contentType", + "serializedName": "contentType", + "type": { + "$ref": "3" + }, + "location": "", + "isApiVersion": false, + "optional": false, + "scope": "Method", + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.contentType", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + }, + { + "$id": "27", + "kind": "body", + "name": "body", + "serializedName": "body", + "type": { + "$id": "28", + "kind": "streaming", + "name": "JsonlStreamInfo", + "valueType": { + "$ref": "9" + }, + "contentTypes": [ + "application/jsonl" + ], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream" + }, + "isApiVersion": false, + "contentTypes": [ + "application/jsonl" + ], + "defaultContentType": "application/jsonl", + "optional": false, + "scope": "Method", + "decorators": [], + "readOnly": false, + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.body", + "methodParameterSegments": [ + { + "$ref": "24" + }, + { + "$id": "29", + "kind": "method", + "name": "body", + "serializedName": "body", + "type": { + "$ref": "15" + }, + "location": "", + "isApiVersion": false, + "optional": false, + "scope": "Method", + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream.body", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false, + "serializationOptions": { + "json": { + "name": "body" + } + } + } + ], + "responses": [ + { + "statusCodes": [ + 204 + ], + "headers": [], + "isErrorResponse": false, + "serializationOptions": {} + } + ], + "httpMethod": "POST", + "uri": "{endpoint}", + "path": "/streaming/jsonl/basic/send", + "requestMediaTypes": [ + "application/jsonl" + ], + "bufferResponse": true, + "generateProtocolMethod": true, + "generateConvenienceMethod": true, + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.send", + "decorators": [], + "namespace": "Streaming.Jsonl.Basic" + }, + "parameters": [ + { + "$ref": "24" + } + ], + "response": {}, + "isOverride": false, + "generateConvenient": true, + "generateProtocol": true, + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.send" + }, + { + "$id": "30", + "kind": "basic", + "name": "receive", + "isExactName": false, + "accessibility": "public", + "apiVersions": [], + "operation": { + "$id": "31", + "name": "receive", + "isExactName": false, + "resourceName": "Basic", + "accessibility": "public", + "parameters": [ + { + "$id": "32", + "kind": "header", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "5" + }, + "isApiVersion": false, + "optional": false, + "isContentType": false, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.receive.accept", + "methodParameterSegments": [ + { + "$id": "33", + "kind": "method", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "5" + }, + "location": "Header", + "isApiVersion": false, + "optional": false, + "scope": "Constant", + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.receive.accept", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + } + ], + "responses": [ + { + "statusCodes": [ + 200 + ], + "bodyType": { + "$id": "34", + "kind": "streaming", + "name": "JsonlStreamInfo", + "valueType": { + "$ref": "9" + }, + "contentTypes": [ + "application/jsonl" + ], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream" + }, + "headers": [ + { + "name": "contentType", + "nameInResponse": "content-type", + "type": { + "$ref": "7" + } + } + ], + "isErrorResponse": false, + "contentTypes": [ + "application/jsonl" + ], + "serializationOptions": { + "json": { + "name": "" + } + } + } + ], + "httpMethod": "GET", + "uri": "{endpoint}", + "path": "/streaming/jsonl/basic/receive", + "bufferResponse": false, + "generateProtocolMethod": true, + "generateConvenienceMethod": true, + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.receive", + "decorators": [], + "namespace": "Streaming.Jsonl.Basic" + }, + "parameters": [ + { + "$ref": "33" + } + ], + "response": { + "type": { + "$id": "35", + "kind": "streaming", + "name": "JsonlStreamInfo", + "valueType": { + "$ref": "9" + }, + "contentTypes": [ + "application/jsonl" + ], + "crossLanguageDefinitionId": "TypeSpec.Http.Streams.JsonlStream" + } + }, + "isOverride": false, + "generateConvenient": true, + "generateProtocol": true, + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.receive" + } + ], + "parameters": [ + { + "$id": "36", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "37", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "38", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic.endpoint", + "isExactName": false + } + ], + "initializedBy": 0, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Jsonl.Basic", + "apiVersions": [], + "parent": { + "$ref": "16" + }, + "isMultiServiceClient": false + } + ], + "isMultiServiceClient": false + } + ] +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Configuration.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Configuration.json new file mode 100644 index 00000000000..eb95a563412 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Configuration.json @@ -0,0 +1,3 @@ +{ + "package-name": "Streaming.Sse" +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.NuGet.targets b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.NuGet.targets new file mode 100644 index 00000000000..9df53f09f6f --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.NuGet.targets @@ -0,0 +1,6 @@ + + + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.slnx b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.slnx new file mode 100644 index 00000000000..cbc7b200ee6 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/Streaming.Sse.slnx @@ -0,0 +1,3 @@ + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.Serialization.cs new file mode 100644 index 00000000000..0aae2e14311 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace Streaming.Sse._Retrieve +{ + public partial class RetrievalRequest : IJsonModel + { + internal RetrievalRequest() => throw null; + + protected virtual RetrievalRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) => throw null; + + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) => throw null; + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => throw null; + + RetrievalRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => throw null; + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => throw null; + + public static implicit operator BinaryContent(RetrievalRequest retrievalRequest) => throw null; + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + RetrievalRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + + protected virtual RetrievalRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.cs new file mode 100644 index 00000000000..883e937d320 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/RetrievalRequest.cs @@ -0,0 +1,13 @@ +// + +#nullable disable + +namespace Streaming.Sse._Retrieve +{ + public partial class RetrievalRequest + { + public RetrievalRequest(string query) => throw null; + + public string Query => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs new file mode 100644 index 00000000000..b6935d97a4c --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System.ClientModel.Primitives; +using Streaming.Sse._Named; +using Streaming.Sse._Retrieve; +using Streaming.Sse._Unnamed; + +namespace Streaming.Sse +{ + [ModelReaderWriterBuildable(typeof(RetrievalRequest))] + public partial class StreamingSseContext : ModelReaderWriterContext + { + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs new file mode 100644 index 00000000000..3beb52e1fbc --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Net.ServerSentEvents; +using System.Threading; +using System.Threading.Tasks; + +namespace Streaming.Sse._Named +{ + public partial class Named + { + protected Named() => throw null; + + internal Named(ClientPipeline pipeline, Uri endpoint) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual ClientResult Receive(RequestOptions options) => throw null; + + public virtual Task ReceiveAsync(RequestOptions options) => throw null; + + public virtual Task>> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs new file mode 100644 index 00000000000..5e1432ef5fb --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Net.ServerSentEvents; +using System.Threading; +using System.Threading.Tasks; + +namespace Streaming.Sse._Retrieve +{ + public partial class Retrieve + { + protected Retrieve() => throw null; + + internal Retrieve(ClientPipeline pipeline, Uri endpoint) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual ClientResult Stream(BinaryContent content, RequestOptions options = null) => throw null; + + public virtual Task StreamAsync(BinaryContent content, RequestOptions options = null) => throw null; + + public virtual Task>> StreamAsync(RetrievalRequest request, CancellationToken cancellationToken = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClient.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClient.cs new file mode 100644 index 00000000000..ad7867309e0 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClient.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Streaming.Sse._Named; +using Streaming.Sse._Retrieve; +using Streaming.Sse._Unnamed; + +namespace Streaming.Sse +{ + public partial class SseClient + { + public SseClient() : this(new Uri("http://localhost:3000"), new SseClientOptions()) => throw null; + + internal SseClient(AuthenticationPolicy authenticationPolicy, Uri endpoint, SseClientOptions options) => throw null; + + public SseClient(Uri endpoint, SseClientOptions options) : this(null, endpoint, options) => throw null; + + [Experimental("SCME0002")] + public SseClient(SseClientSettings settings) : this(AuthenticationPolicy.Create(settings), settings?.Endpoint, settings?.Options) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual Unnamed GetUnnamedClient() => throw null; + + public virtual Named GetNamedClient() => throw null; + + public virtual Retrieve GetRetrieveClient() => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientOptions.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientOptions.cs new file mode 100644 index 00000000000..49fc6d62de3 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientOptions.cs @@ -0,0 +1,18 @@ +// + +#nullable disable + +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Configuration; + +namespace Streaming.Sse +{ + public partial class SseClientOptions : ClientPipelineOptions + { + public SseClientOptions() => throw null; + + [Experimental("SCME0002")] + internal SseClientOptions(IConfigurationSection section) : base(section) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientSettings.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientSettings.cs new file mode 100644 index 00000000000..951713d7154 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/SseClientSettings.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Configuration; + +namespace Streaming.Sse +{ + [Experimental("SCME0002")] + public partial class SseClientSettings : ClientSettings + { + public Uri Endpoint + { + get => throw null; + set => throw null; + } + + public SseClientOptions Options + { + get => throw null; + set => throw null; + } + + protected override void BindCore(IConfigurationSection section) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs new file mode 100644 index 00000000000..e81bf5ea6ef --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System.Collections.Generic; +using Streaming.Sse._Named; +using Streaming.Sse._Retrieve; +using Streaming.Sse._Unnamed; + +namespace Streaming.Sse +{ + public static partial class StreamingSseModelFactory + { + + public static RetrievalRequest RetrievalRequest(string query = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs new file mode 100644 index 00000000000..111a4901f05 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Net.ServerSentEvents; +using System.Threading; +using System.Threading.Tasks; + +namespace Streaming.Sse._Unnamed +{ + public partial class Unnamed + { + protected Unnamed() => throw null; + + internal Unnamed(ClientPipeline pipeline, Uri endpoint) => throw null; + + public ClientPipeline Pipeline => throw null; + + public virtual ClientResult Receive(RequestOptions options) => throw null; + + public virtual Task ReceiveAsync(RequestOptions options) => throw null; + + public virtual Task>> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/schema/ConfigurationSchema.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/schema/ConfigurationSchema.json new file mode 100644 index 00000000000..85e07477d00 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/schema/ConfigurationSchema.json @@ -0,0 +1,40 @@ +{ + "type": "object", + "properties": { + "Clients": { + "type": "object", + "properties": { + "SseClient": { + "type": "object", + "description": "Configuration for SseClient.", + "properties": { + "Endpoint": { + "type": "string", + "format": "uri", + "description": "Gets or sets the Endpoint." + }, + "Credential": { + "$ref": "#/definitions/credential" + }, + "Options": { + "$ref": "#/definitions/sseClientOptions" + } + } + } + }, + "additionalProperties": { + "type": "object", + "description": "Configuration for a named client instance." + } + } + }, + "definitions": { + "sseClientOptions": { + "allOf": [ + { + "$ref": "#/definitions/options" + } + ] + } + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Streaming.Sse.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Streaming.Sse.csproj new file mode 100644 index 00000000000..b3efc954bce --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Streaming.Sse.csproj @@ -0,0 +1,20 @@ + + + This is the Streaming.Sse client library for developing .NET applications with rich experience. + SDK Code Generation Streaming.Sse + 1.0.0-beta.1 + Streaming.Sse + netstandard2.0;net8.0 + latest + true + + + + + + + + + + + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/tspCodeModel.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/tspCodeModel.json new file mode 100644 index 00000000000..8e08fa3705e --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/tspCodeModel.json @@ -0,0 +1,1085 @@ +{ + "name": "Streaming.Sse", + "apiVersions": [], + "enums": [], + "constants": [ + { + "$id": "1", + "kind": "constant", + "name": "ReceiveResponseContentType", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "2", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + }, + { + "$id": "3", + "kind": "constant", + "name": "ReceiveResponseContentType1", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "4", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + }, + { + "$id": "5", + "kind": "constant", + "name": "ReceiveResponseContentType2", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "6", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + }, + { + "$id": "7", + "kind": "constant", + "name": "Receive", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "8", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "[DONE]", + "decorators": [], + "isExactName": false + }, + { + "$id": "9", + "kind": "constant", + "name": "ReceiveResponseContentType3", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "10", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + }, + { + "$id": "11", + "kind": "constant", + "name": "StreamContentType", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "12", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "application/json", + "decorators": [], + "isExactName": false + }, + { + "$id": "13", + "kind": "constant", + "name": "ReceiveResponseContentType4", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "14", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + }, + { + "$id": "15", + "kind": "constant", + "name": "Receive1", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "16", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "[DONE]", + "decorators": [], + "isExactName": false + }, + { + "$id": "17", + "kind": "constant", + "name": "ReceiveResponseContentType5", + "namespace": "", + "usage": "None", + "valueType": { + "$id": "18", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "value": "text/event-stream", + "decorators": [], + "isExactName": false + } + ], + "models": [ + { + "$id": "19", + "kind": "model", + "name": "Info", + "namespace": "Streaming.Sse.Unnamed", + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.Info", + "usage": "Output", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "20", + "kind": "property", + "name": "desc", + "type": { + "$id": "21", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.Info.desc", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "22", + "kind": "model", + "name": "ResponseCreated", + "namespace": "Streaming.Sse.Named", + "crossLanguageDefinitionId": "Streaming.Sse.Named.ResponseCreated", + "usage": "Output", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "23", + "kind": "property", + "name": "id", + "type": { + "$id": "24", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Named.ResponseCreated.id", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "25", + "kind": "model", + "name": "ResponseDelta", + "namespace": "Streaming.Sse.Named", + "crossLanguageDefinitionId": "Streaming.Sse.Named.ResponseDelta", + "usage": "Output", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "26", + "kind": "property", + "name": "delta", + "type": { + "$id": "27", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Named.ResponseDelta.delta", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "28", + "kind": "model", + "name": "RetrievalRequest", + "namespace": "Streaming.Sse.Retrieve", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.RetrievalRequest", + "usage": "Input,Json", + "decorators": [], + "serializationOptions": { + "json": { + "name": "RetrievalRequest" + } + }, + "isExactName": false, + "properties": [ + { + "$id": "29", + "kind": "property", + "name": "query", + "serializedName": "query", + "type": { + "$id": "30", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.RetrievalRequest.query", + "serializationOptions": { + "json": { + "name": "query" + } + }, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "31", + "kind": "model", + "name": "PartialResult", + "namespace": "Streaming.Sse.Retrieve", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.PartialResult", + "usage": "Output", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "32", + "kind": "property", + "name": "text", + "type": { + "$id": "33", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.PartialResult.text", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + }, + { + "$id": "34", + "kind": "model", + "name": "FinalResult", + "namespace": "Streaming.Sse.Retrieve", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.FinalResult", + "usage": "Output", + "decorators": [], + "serializationOptions": {}, + "isExactName": false, + "properties": [ + { + "$id": "35", + "kind": "property", + "name": "references", + "type": { + "$id": "36", + "kind": "array", + "name": "Array", + "valueType": { + "$id": "37", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string", + "decorators": [] + }, + "crossLanguageDefinitionId": "TypeSpec.Array", + "decorators": [] + }, + "optional": false, + "readOnly": false, + "discriminator": false, + "flatten": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.FinalResult.references", + "serializationOptions": {}, + "isHttpMetadata": false, + "isExactName": false + } + ] + } + ], + "clients": [ + { + "$id": "38", + "kind": "client", + "name": "SseClient", + "isExactName": false, + "namespace": "Streaming.Sse", + "doc": "Test of server-sent events (SSE) streaming.", + "methods": [], + "parameters": [ + { + "$id": "39", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "40", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "41", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Sse.endpoint", + "isExactName": false + } + ], + "initializedBy": 1, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse", + "apiVersions": [], + "children": [ + { + "$id": "42", + "kind": "client", + "name": "Unnamed", + "isExactName": false, + "namespace": "Streaming.Sse.Unnamed", + "methods": [ + { + "$id": "43", + "kind": "basic", + "name": "receive", + "isExactName": false, + "accessibility": "public", + "apiVersions": [], + "operation": { + "$id": "44", + "name": "receive", + "isExactName": false, + "resourceName": "Unnamed", + "accessibility": "public", + "parameters": [ + { + "$id": "45", + "kind": "header", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "1" + }, + "isApiVersion": false, + "optional": false, + "isContentType": false, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.receive.accept", + "methodParameterSegments": [ + { + "$id": "46", + "kind": "method", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "1" + }, + "location": "Header", + "isApiVersion": false, + "optional": false, + "scope": "Constant", + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.receive.accept", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + } + ], + "responses": [ + { + "statusCodes": [ + 200 + ], + "bodyType": { + "$id": "47", + "kind": "streaming", + "name": "SSEStreamUnnamedEvents", + "valueType": { + "$id": "48", + "kind": "union", + "name": "UnnamedEvents", + "variantTypes": [ + { + "$ref": "19" + } + ], + "namespace": "Streaming.Sse.Unnamed", + "decorators": [], + "isExactName": false + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + }, + "headers": [ + { + "name": "contentType", + "nameInResponse": "content-type", + "type": { + "$ref": "3" + } + } + ], + "isErrorResponse": false, + "contentTypes": [ + "text/event-stream" + ], + "serializationOptions": {} + } + ], + "httpMethod": "GET", + "uri": "{endpoint}", + "path": "/streaming/sse/unnamed/receive", + "bufferResponse": false, + "generateProtocolMethod": true, + "generateConvenienceMethod": true, + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.receive", + "decorators": [], + "namespace": "Streaming.Sse.Unnamed" + }, + "parameters": [ + { + "$ref": "46" + } + ], + "response": { + "type": { + "$id": "49", + "kind": "streaming", + "name": "SSEStreamUnnamedEvents", + "valueType": { + "$ref": "48" + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + } + }, + "isOverride": false, + "generateConvenient": true, + "generateProtocol": true, + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.receive" + } + ], + "parameters": [ + { + "$id": "50", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "51", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "52", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed.endpoint", + "isExactName": false + } + ], + "initializedBy": 0, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Unnamed", + "apiVersions": [], + "parent": { + "$ref": "38" + }, + "isMultiServiceClient": false + }, + { + "$id": "53", + "kind": "client", + "name": "Named", + "isExactName": false, + "namespace": "Streaming.Sse.Named", + "methods": [ + { + "$id": "54", + "kind": "basic", + "name": "receive", + "isExactName": false, + "accessibility": "public", + "apiVersions": [], + "operation": { + "$id": "55", + "name": "receive", + "isExactName": false, + "resourceName": "Named", + "accessibility": "public", + "parameters": [ + { + "$id": "56", + "kind": "header", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "5" + }, + "isApiVersion": false, + "optional": false, + "isContentType": false, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Named.receive.accept", + "methodParameterSegments": [ + { + "$id": "57", + "kind": "method", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "5" + }, + "location": "Header", + "isApiVersion": false, + "optional": false, + "scope": "Constant", + "crossLanguageDefinitionId": "Streaming.Sse.Named.receive.accept", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + } + ], + "responses": [ + { + "statusCodes": [ + 200 + ], + "bodyType": { + "$id": "58", + "kind": "streaming", + "name": "SSEStreamResponseEvents", + "valueType": { + "$id": "59", + "kind": "union", + "name": "ResponseEvents", + "variantTypes": [ + { + "$ref": "22" + }, + { + "$ref": "25" + }, + { + "$ref": "7" + } + ], + "namespace": "Streaming.Sse.Named", + "decorators": [], + "isExactName": false + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "terminalEventValue": "[DONE]", + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + }, + "headers": [ + { + "name": "contentType", + "nameInResponse": "content-type", + "type": { + "$ref": "9" + } + } + ], + "isErrorResponse": false, + "contentTypes": [ + "text/event-stream" + ], + "serializationOptions": {} + } + ], + "httpMethod": "GET", + "uri": "{endpoint}", + "path": "/streaming/sse/named/receive", + "bufferResponse": false, + "generateProtocolMethod": true, + "generateConvenienceMethod": true, + "crossLanguageDefinitionId": "Streaming.Sse.Named.receive", + "decorators": [], + "namespace": "Streaming.Sse.Named" + }, + "parameters": [ + { + "$ref": "57" + } + ], + "response": { + "type": { + "$id": "60", + "kind": "streaming", + "name": "SSEStreamResponseEvents", + "valueType": { + "$ref": "59" + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "terminalEventValue": "[DONE]", + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + } + }, + "isOverride": false, + "generateConvenient": true, + "generateProtocol": true, + "crossLanguageDefinitionId": "Streaming.Sse.Named.receive" + } + ], + "parameters": [ + { + "$id": "61", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "62", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "63", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Sse.Named.endpoint", + "isExactName": false + } + ], + "initializedBy": 0, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Named", + "apiVersions": [], + "parent": { + "$ref": "38" + }, + "isMultiServiceClient": false + }, + { + "$id": "64", + "kind": "client", + "name": "Retrieve", + "isExactName": false, + "namespace": "Streaming.Sse.Retrieve", + "methods": [ + { + "$id": "65", + "kind": "basic", + "name": "stream", + "isExactName": false, + "accessibility": "public", + "apiVersions": [], + "operation": { + "$id": "66", + "name": "stream", + "isExactName": false, + "resourceName": "Retrieve", + "accessibility": "public", + "parameters": [ + { + "$id": "67", + "kind": "header", + "name": "contentType", + "serializedName": "Content-Type", + "doc": "Body parameter's content type. Known values are application/json", + "type": { + "$ref": "11" + }, + "isApiVersion": false, + "optional": false, + "isContentType": true, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.contentType", + "methodParameterSegments": [ + { + "$id": "68", + "kind": "method", + "name": "contentType", + "serializedName": "Content-Type", + "doc": "Body parameter's content type. Known values are application/json", + "type": { + "$ref": "11" + }, + "location": "Header", + "isApiVersion": false, + "optional": false, + "scope": "Constant", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.contentType", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + }, + { + "$id": "69", + "kind": "header", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "13" + }, + "isApiVersion": false, + "optional": false, + "isContentType": false, + "scope": "Constant", + "readOnly": false, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.accept", + "methodParameterSegments": [ + { + "$id": "70", + "kind": "method", + "name": "accept", + "serializedName": "Accept", + "type": { + "$ref": "13" + }, + "location": "Header", + "isApiVersion": false, + "optional": false, + "scope": "Constant", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.accept", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false + }, + { + "$id": "71", + "kind": "body", + "name": "request", + "serializedName": "request", + "type": { + "$ref": "28" + }, + "isApiVersion": false, + "contentTypes": [ + "application/json" + ], + "defaultContentType": "application/json", + "optional": false, + "scope": "Method", + "decorators": [], + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.request", + "methodParameterSegments": [ + { + "$id": "72", + "kind": "method", + "name": "request", + "serializedName": "request", + "type": { + "$ref": "28" + }, + "location": "Body", + "isApiVersion": false, + "optional": false, + "scope": "Method", + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream.request", + "readOnly": false, + "access": "public", + "decorators": [], + "isExactName": false + } + ], + "isExactName": false, + "serializationOptions": { + "json": { + "name": "request" + } + } + } + ], + "responses": [ + { + "statusCodes": [ + 200 + ], + "bodyType": { + "$id": "73", + "kind": "streaming", + "name": "SSEStreamRetrievalEvents", + "valueType": { + "$id": "74", + "kind": "union", + "name": "RetrievalEvents", + "variantTypes": [ + { + "$ref": "31" + }, + { + "$ref": "34" + }, + { + "$ref": "15" + } + ], + "namespace": "Streaming.Sse.Retrieve", + "decorators": [], + "isExactName": false + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "terminalEventValue": "[DONE]", + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + }, + "headers": [ + { + "name": "contentType", + "nameInResponse": "content-type", + "type": { + "$ref": "17" + } + } + ], + "isErrorResponse": false, + "contentTypes": [ + "text/event-stream" + ], + "serializationOptions": {} + } + ], + "httpMethod": "POST", + "uri": "{endpoint}", + "path": "/streaming/sse/retrieve/stream", + "requestMediaTypes": [ + "application/json" + ], + "bufferResponse": false, + "generateProtocolMethod": true, + "generateConvenienceMethod": true, + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream", + "decorators": [], + "namespace": "Streaming.Sse.Retrieve" + }, + "parameters": [ + { + "$ref": "72" + }, + { + "$ref": "68" + }, + { + "$ref": "70" + } + ], + "response": { + "type": { + "$id": "75", + "kind": "streaming", + "name": "SSEStreamRetrievalEvents", + "valueType": { + "$ref": "74" + }, + "streamKind": "sse", + "contentTypes": [ + "text/event-stream" + ], + "terminalEventValue": "[DONE]", + "crossLanguageDefinitionId": "TypeSpec.SSE.SSEStream" + } + }, + "isOverride": false, + "generateConvenient": true, + "generateProtocol": true, + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.stream" + } + ], + "parameters": [ + { + "$id": "76", + "kind": "endpoint", + "name": "endpoint", + "serializedName": "endpoint", + "doc": "Service host", + "type": { + "$id": "77", + "kind": "url", + "name": "endpoint", + "crossLanguageDefinitionId": "TypeSpec.url" + }, + "isApiVersion": false, + "optional": false, + "scope": "Client", + "isEndpoint": true, + "defaultValue": { + "type": { + "$id": "78", + "kind": "string", + "name": "string", + "crossLanguageDefinitionId": "TypeSpec.string" + }, + "value": "http://localhost:3000" + }, + "serverUrlTemplate": "{endpoint}", + "skipUrlEncoding": false, + "readOnly": false, + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve.endpoint", + "isExactName": false + } + ], + "initializedBy": 0, + "decorators": [], + "crossLanguageDefinitionId": "Streaming.Sse.Retrieve", + "apiVersions": [], + "parent": { + "$ref": "38" + }, + "isMultiServiceClient": false + } + ], + "isMultiServiceClient": false + } + ] +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/array/src/Type.Array.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/array/src/Type.Array.csproj index 282ee36d04e..2b0058055ef 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/array/src/Type.Array.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/array/src/Type.Array.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/dictionary/src/Type.Dictionary.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/dictionary/src/Type.Dictionary.csproj index d648362b471..a018d6ed519 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/dictionary/src/Type.Dictionary.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/dictionary/src/Type.Dictionary.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/extensible/src/Type.Enum.Extensible.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/extensible/src/Type.Enum.Extensible.csproj index caf5e1002c3..5f66178f4b5 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/extensible/src/Type.Enum.Extensible.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/extensible/src/Type.Enum.Extensible.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/fixed/src/Type.Enum.Fixed.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/fixed/src/Type.Enum.Fixed.csproj index 4306db74243..0b6a28e121b 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/fixed/src/Type.Enum.Fixed.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/fixed/src/Type.Enum.Fixed.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/empty/src/Type.Model.Empty.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/empty/src/Type.Model.Empty.csproj index 3ca811ed780..4b1540d2e84 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/empty/src/Type.Model.Empty.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/empty/src/Type.Model.Empty.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/enum-discriminator/src/Type.Model.Inheritance.EnumDiscriminator.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/enum-discriminator/src/Type.Model.Inheritance.EnumDiscriminator.csproj index f5904880175..1a83e109554 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/enum-discriminator/src/Type.Model.Inheritance.EnumDiscriminator.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/enum-discriminator/src/Type.Model.Inheritance.EnumDiscriminator.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/nested-discriminator/src/Type.Model.Inheritance.NestedDiscriminator.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/nested-discriminator/src/Type.Model.Inheritance.NestedDiscriminator.csproj index 163b67e7efd..ba04d78725a 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/nested-discriminator/src/Type.Model.Inheritance.NestedDiscriminator.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/nested-discriminator/src/Type.Model.Inheritance.NestedDiscriminator.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/not-discriminated/src/Type.Model.Inheritance.NotDiscriminated.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/not-discriminated/src/Type.Model.Inheritance.NotDiscriminated.csproj index f61e80ee60f..ff6c71194bf 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/not-discriminated/src/Type.Model.Inheritance.NotDiscriminated.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/not-discriminated/src/Type.Model.Inheritance.NotDiscriminated.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/recursive/src/Type.Model.Inheritance.Recursive.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/recursive/src/Type.Model.Inheritance.Recursive.csproj index 65907515600..d0fb7e472e2 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/recursive/src/Type.Model.Inheritance.Recursive.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/recursive/src/Type.Model.Inheritance.Recursive.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/single-discriminator/src/Type.Model.Inheritance.SingleDiscriminator.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/single-discriminator/src/Type.Model.Inheritance.SingleDiscriminator.csproj index 2212640653b..a642bffd6dd 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/single-discriminator/src/Type.Model.Inheritance.SingleDiscriminator.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/single-discriminator/src/Type.Model.Inheritance.SingleDiscriminator.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/usage/src/Type.Model.Usage.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/usage/src/Type.Model.Usage.csproj index 6b0709be701..199190339c7 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/usage/src/Type.Model.Usage.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/usage/src/Type.Model.Usage.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/visibility/src/Type.Model.Visibility.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/visibility/src/Type.Model.Visibility.csproj index 5df6ffbf941..5ab3962a101 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/visibility/src/Type.Model.Visibility.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/visibility/src/Type.Model.Visibility.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/additional-properties/src/Type.Property.AdditionalProperties.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/additional-properties/src/Type.Property.AdditionalProperties.csproj index 7ff68f688d4..6f03770938b 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/additional-properties/src/Type.Property.AdditionalProperties.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/additional-properties/src/Type.Property.AdditionalProperties.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/nullable/src/Type.Property.Nullable.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/nullable/src/Type.Property.Nullable.csproj index 83175f58ab6..f5adca9b5f0 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/nullable/src/Type.Property.Nullable.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/nullable/src/Type.Property.Nullable.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/optionality/src/Type.Property.Optional.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/optionality/src/Type.Property.Optional.csproj index 49518dbc1cb..1a503464605 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/optionality/src/Type.Property.Optional.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/optionality/src/Type.Property.Optional.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/value-types/src/Type.Property.ValueTypes.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/value-types/src/Type.Property.ValueTypes.csproj index aff69f63aae..b2940f3ac9c 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/value-types/src/Type.Property.ValueTypes.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/value-types/src/Type.Property.ValueTypes.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/scalar/src/Type.Scalar.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/scalar/src/Type.Scalar.csproj index 85bb48347ca..bbe84442f0d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/scalar/src/Type.Scalar.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/scalar/src/Type.Scalar.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/union/src/Type.Union.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/union/src/Type.Union.csproj index d4b2566618c..fdae28e0084 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/type/union/src/Type.Union.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/type/union/src/Type.Union.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v1/src/Versioning.Added.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v1/src/Versioning.Added.V1.csproj index 2d24f7677a0..e4cb17a59cd 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v1/src/Versioning.Added.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v1/src/Versioning.Added.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v2/src/Versioning.Added.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v2/src/Versioning.Added.V2.csproj index e28289358b0..5ae2e0e7c0f 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v2/src/Versioning.Added.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v2/src/Versioning.Added.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v1/src/Versioning.MadeOptional.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v1/src/Versioning.MadeOptional.V1.csproj index 425e6427d85..62727261f5a 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v1/src/Versioning.MadeOptional.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v1/src/Versioning.MadeOptional.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v2/src/Versioning.MadeOptional.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v2/src/Versioning.MadeOptional.V2.csproj index b9ed3268a5c..e8246d735ad 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v2/src/Versioning.MadeOptional.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v2/src/Versioning.MadeOptional.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v1/src/Versioning.Removed.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v1/src/Versioning.Removed.V1.csproj index a321beb505f..6420b77e524 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v1/src/Versioning.Removed.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v1/src/Versioning.Removed.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2/src/Versioning.Removed.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2/src/Versioning.Removed.V2.csproj index da25a39a527..af26c63b8f7 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2/src/Versioning.Removed.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2/src/Versioning.Removed.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2Preview/src/Versioning.Removed.V2Preview.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2Preview/src/Versioning.Removed.V2Preview.csproj index cdae2ae4a5d..528337c81e9 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2Preview/src/Versioning.Removed.V2Preview.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2Preview/src/Versioning.Removed.V2Preview.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v1/src/Versioning.RenamedFrom.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v1/src/Versioning.RenamedFrom.V1.csproj index 8a6c4fe684c..2c5373dbc10 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v1/src/Versioning.RenamedFrom.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v1/src/Versioning.RenamedFrom.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v2/src/Versioning.RenamedFrom.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v2/src/Versioning.RenamedFrom.V2.csproj index cdb136acd64..101dd8d4c66 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v2/src/Versioning.RenamedFrom.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v2/src/Versioning.RenamedFrom.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v1/src/Versioning.ReturnTypeChangedFrom.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v1/src/Versioning.ReturnTypeChangedFrom.V1.csproj index 535e8837878..81f7a0eca40 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v1/src/Versioning.ReturnTypeChangedFrom.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v1/src/Versioning.ReturnTypeChangedFrom.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v2/src/Versioning.ReturnTypeChangedFrom.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v2/src/Versioning.ReturnTypeChangedFrom.V2.csproj index 891cf9cea8a..fa05ce1fd87 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v2/src/Versioning.ReturnTypeChangedFrom.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v2/src/Versioning.ReturnTypeChangedFrom.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v1/src/Versioning.TypeChangedFrom.V1.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v1/src/Versioning.TypeChangedFrom.V1.csproj index 2501b19f393..2c797848dcb 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v1/src/Versioning.TypeChangedFrom.V1.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v1/src/Versioning.TypeChangedFrom.V1.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v2/src/Versioning.TypeChangedFrom.V2.csproj b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v2/src/Versioning.TypeChangedFrom.V2.csproj index 315b0819d81..13aecbcb9d1 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v2/src/Versioning.TypeChangedFrom.V2.csproj +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v2/src/Versioning.TypeChangedFrom.V2.csproj @@ -10,7 +10,7 @@ - + diff --git a/packages/http-client-csharp/package-lock.json b/packages/http-client-csharp/package-lock.json index b154e55c3a9..e0ad676c777 100644 --- a/packages/http-client-csharp/package-lock.json +++ b/packages/http-client-csharp/package-lock.json @@ -12,25 +12,26 @@ "@azure/identity": "^4.13.0" }, "devDependencies": { - "@azure-tools/azure-http-specs": "0.1.0-alpha.42", - "@azure-tools/typespec-azure-core": "0.69.0", - "@azure-tools/typespec-client-generator-core": "0.69.2", + "@azure-tools/azure-http-specs": "0.1.0-alpha.43", + "@azure-tools/typespec-azure-core": "0.70.0", + "@azure-tools/typespec-client-generator-core": "0.70.0", "@microsoft/api-extractor": "^7.52.2", "@types/node": "~22.12.0", - "@typespec/compiler": "1.13.0", - "@typespec/http": "1.13.0", - "@typespec/http-specs": "0.1.0-alpha.38", - "@typespec/json-schema": "1.13.0", - "@typespec/library-linter": "0.83.0", - "@typespec/openapi": "1.13.0", - "@typespec/rest": "0.83.0", - "@typespec/spec-api": "0.1.0-alpha.14", - "@typespec/spector": "0.1.0-alpha.25", - "@typespec/sse": "0.83.0", - "@typespec/streams": "0.83.0", - "@typespec/tspd": "0.75.0", - "@typespec/versioning": "0.83.0", - "@typespec/xml": "0.83.0", + "@typespec/compiler": "1.14.0", + "@typespec/events": "0.84.0", + "@typespec/http": "1.14.0", + "@typespec/http-specs": "0.1.0-alpha.40", + "@typespec/json-schema": "1.14.0", + "@typespec/library-linter": "0.84.0", + "@typespec/openapi": "1.14.0", + "@typespec/rest": "0.84.0", + "@typespec/spec-api": "0.1.0-alpha.15", + "@typespec/spector": "0.1.0-alpha.27", + "@typespec/sse": "0.84.0", + "@typespec/streams": "0.84.0", + "@typespec/tspd": "0.76.0", + "@typespec/versioning": "0.84.0", + "@typespec/xml": "0.84.0", "@vitest/coverage-v8": "^4.1.8", "@vitest/ui": "^4.1.8", "c8": "^10.1.2", @@ -42,6 +43,7 @@ "@azure-tools/typespec-azure-core": ">=0.69.0 <0.70.0 || ~0.70.0-0", "@azure-tools/typespec-client-generator-core": ">=0.69.2 <0.70.0 || ~0.70.0-0", "@typespec/compiler": "^1.13.0", + "@typespec/events": ">=0.83.0 <0.84.0 || ~0.84.0-0", "@typespec/http": "^1.13.0", "@typespec/openapi": "^1.13.0", "@typespec/rest": ">=0.83.0 <0.84.0 || ~0.84.0-0", @@ -51,86 +53,85 @@ } }, "node_modules/@alloy-js/core": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@alloy-js/core/-/core-0.23.1.tgz", - "integrity": "sha512-zbPXbiWjF3BvgO+a6dyDiA9uI19x5cHKDy5iC3U2/DIimIB0/j1/ObT9BNIzcM69h5pYt7ADDGXx5eNyb8j7bw==", + "version": "0.24.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@alloy-js/core/-/core-0.24.1.tgz", + "integrity": "sha1-B/qI0IFQXL2O2tPPt4YIuWLgQXg=", "dev": true, "license": "MIT", "dependencies": { "@types/ws": "^8.18.1", - "@vue/reactivity": "^3.5.13", + "@vue/reactivity": "^3.5.35", "cli-table3": "^0.6.5", - "devalue": "^5.6.2", + "devalue": "^5.8.1", "pathe": "^2.0.3", "picocolors": "^1.1.1", - "prettier": "^3.6.2", - "ws": "^8.19.0" + "ws": "^8.21.0" } }, "node_modules/@alloy-js/markdown": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@alloy-js/markdown/-/markdown-0.23.0.tgz", - "integrity": "sha512-tap9rYtEyxasdl8vQuBj3HHnI7DraSkBppcFOMoPzg7XJyHnZiO+/4CHWiWepMN49UDxk3br0k34+THM1A3H3w==", + "version": "0.24.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@alloy-js/markdown/-/markdown-0.24.0.tgz", + "integrity": "sha1-P7sH1vrlzVKOoMszwtzimExZqpk=", "dev": true, "license": "MIT", "dependencies": { - "@alloy-js/core": "~0.23.0", + "@alloy-js/core": "~0.24.0", "yaml": "^2.7.1" } }, "node_modules/@alloy-js/typescript": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@alloy-js/typescript/-/typescript-0.23.0.tgz", - "integrity": "sha512-aqZpW3+Pd/dgMkqAF+/KMELKqJppIKe1xO1LdcNgXA7p71DuogBvlj2UVzFtHRtP221Ewn/vFSJ+ZpPFv8FLDQ==", + "version": "0.24.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@alloy-js/typescript/-/typescript-0.24.0.tgz", + "integrity": "sha1-jCxYdMkafWwMScY8eKcVJ4iQmLc=", "dev": true, "license": "MIT", "dependencies": { - "@alloy-js/core": "~0.23.0", + "@alloy-js/core": "~0.24.0", "change-case": "^5.4.4", "pathe": "^2.0.3" } }, "node_modules/@azure-tools/azure-http-specs": { - "version": "0.1.0-alpha.42", - "resolved": "https://registry.npmjs.org/@azure-tools/azure-http-specs/-/azure-http-specs-0.1.0-alpha.42.tgz", - "integrity": "sha512-vQOAepoGK1lSc9ohAub+NM1MiLJS5swIA5Ya3TTIJ4KkD1x6j5msdSRMgNgb0rmux/WWrKTRtsFDAiOF1Z0HKg==", + "version": "0.1.0-alpha.43", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure-tools/azure-http-specs/-/azure-http-specs-0.1.0-alpha.43.tgz", + "integrity": "sha1-2ng+uLT4krC24qTeSdF+RUCrZ7c=", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.14", - "@typespec/spector": "^0.1.0-alpha.25" + "@typespec/spec-api": "^0.1.0-alpha.15", + "@typespec/spector": "^0.1.0-alpha.26" }, "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.69.0", - "@typespec/compiler": "^1.13.0", - "@typespec/http": "^1.13.0", - "@typespec/rest": "^0.83.0", - "@typespec/versioning": "^0.83.0", - "@typespec/xml": "^0.83.0" + "@azure-tools/typespec-azure-core": "^0.70.0", + "@typespec/compiler": "^1.14.0", + "@typespec/http": "^1.14.0", + "@typespec/rest": "^0.84.0", + "@typespec/versioning": "^0.84.0", + "@typespec/xml": "^0.84.0" } }, "node_modules/@azure-tools/typespec-azure-core": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.69.0.tgz", - "integrity": "sha512-UNdPb/DgMvXqwWk9hb54QOAumCJ6u6GGy+bj3RIIT1Sht6FR9rIn8AQ/UQ7WtrhbJBoqvQo5dxtS565a9/VRZw==", + "version": "0.70.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.70.0.tgz", + "integrity": "sha1-k3VYRkt7yNAA1kiBElz71YbZH7A=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/http": "^1.13.0", - "@typespec/rest": "^0.83.0" + "@typespec/compiler": "^1.14.0", + "@typespec/http": "^1.14.0", + "@typespec/rest": "^0.84.0" } }, "node_modules/@azure-tools/typespec-client-generator-core": { - "version": "0.69.2", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.69.2.tgz", - "integrity": "sha512-Td+CUO9UNioD/k2aFnv7TcffGGSaxmodshonTwts3/ZBJLmFtZI06odXr0+7/QDM9K9koPDjCg0VwTbS2c6scA==", + "version": "0.70.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.70.0.tgz", + "integrity": "sha1-k7nEgErM8Vd5PRVdaR8rfSPFpic=", "dev": true, "license": "MIT", "dependencies": { @@ -142,16 +143,16 @@ "node": ">=22.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.69.0", - "@typespec/compiler": "^1.13.0", - "@typespec/events": "^0.83.0", - "@typespec/http": "^1.13.0", - "@typespec/openapi": "^1.13.0", - "@typespec/rest": "^0.83.0", - "@typespec/sse": "^0.83.0", - "@typespec/streams": "^0.83.0", - "@typespec/versioning": "^0.83.0", - "@typespec/xml": "^0.83.0" + "@azure-tools/typespec-azure-core": "^0.70.0", + "@typespec/compiler": "^1.14.0", + "@typespec/events": "^0.84.0", + "@typespec/http": "^1.14.0", + "@typespec/openapi": "^1.14.0", + "@typespec/rest": "^0.84.0", + "@typespec/sse": "^0.84.0", + "@typespec/streams": "^0.84.0", + "@typespec/versioning": "^0.84.0", + "@typespec/xml": "^0.84.0" } }, "node_modules/@azure/abort-controller": { @@ -199,16 +200,16 @@ } }, "node_modules/@azure/core-http-compat": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.4.0.tgz", - "integrity": "sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==", + "version": "2.5.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/core-http-compat/-/core-http-compat-2.5.0.tgz", + "integrity": "sha1-14BmGln4pDL+yyt8b6LVgi3KHeo=", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "peerDependencies": { "@azure/core-client": "^1.10.0", @@ -217,8 +218,8 @@ }, "node_modules/@azure/core-lro": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", - "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha1-eHEFAnog5Fx3ZRqYsBpNOwG3Wgg=", "dev": true, "license": "MIT", "dependencies": { @@ -232,22 +233,22 @@ } }, "node_modules/@azure/core-paging": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", - "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "version": "1.7.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/core-paging/-/core-paging-1.7.0.tgz", + "integrity": "sha1-WVl6L1Q4ujxsh4n8hw9p4OeFMag=", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.23.0.tgz", - "integrity": "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==", + "version": "1.25.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha1-kupJEu27H3OV9IKaMAYxF0qoLwg=", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -259,7 +260,7 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-tracing": { @@ -289,9 +290,9 @@ } }, "node_modules/@azure/core-xml": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.5.1.tgz", - "integrity": "sha512-xcNRHqCoSp4AunOALEae6A8f3qATb83gSrm31Iqb01OzblvC3/W/bfXozcq78EzIdzZzuH1bZ2NvRR0TdX709w==", + "version": "1.6.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/core-xml/-/core-xml-1.6.0.tgz", + "integrity": "sha1-EI8JIOG834owuffoh5ibOhIIK9k=", "dev": true, "license": "MIT", "dependencies": { @@ -299,7 +300,7 @@ "tslib": "^2.8.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/identity": { @@ -373,8 +374,8 @@ }, "node_modules/@azure/storage-blob": { "version": "12.31.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.31.0.tgz", - "integrity": "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/storage-blob/-/storage-blob-12.31.0.tgz", + "integrity": "sha1-l7Cb4r9qtZc5uGLt2BJHmDYs5yA=", "dev": true, "license": "MIT", "dependencies": { @@ -398,16 +399,16 @@ } }, "node_modules/@azure/storage-common": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.3.0.tgz", - "integrity": "sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==", + "version": "12.4.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@azure/storage-common/-/storage-common-12.4.1.tgz", + "integrity": "sha1-eMI6si3QTOJ7E9/omRtFtv3ts0U=", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-http-compat": "^2.2.0", - "@azure/core-rest-pipeline": "^1.19.1", + "@azure/core-rest-pipeline": "^1.24.0", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.1.4", @@ -495,8 +496,8 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha1-u1BFecHK6SPmV2pPXaQ9Jfl729k=", "dev": true, "license": "MIT", "optional": true, @@ -1048,9 +1049,9 @@ } }, "node_modules/@nodable/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "version": "3.0.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@nodable/entities/-/entities-3.0.0.tgz", + "integrity": "sha1-aUcDvIZNMOrtVcLj3vANvWFJNnA=", "dev": true, "funding": [ { @@ -1060,44 +1061,6 @@ ], "license": "MIT" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@oxc-project/types": { "version": "0.133.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", @@ -1523,19 +1486,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", @@ -1615,8 +1565,8 @@ }, "node_modules/@types/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-POOvGlUk7zJ9Lank/YttlcjXBSg=", "dev": true, "license": "MIT" }, @@ -1629,8 +1579,8 @@ }, "node_modules/@types/ws": { "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha1-SEZOS/Ld/RfbE9hFRn9gcP/qSqk=", "dev": true, "license": "MIT", "dependencies": { @@ -1651,9 +1601,9 @@ } }, "node_modules/@typespec/compiler": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.13.0.tgz", - "integrity": "sha512-DonoHiyAMx0UjSmssqTrFtya+v97wny1aHcTLU5QF2wFzLATtcwUU9hbPC+eXhepuTunMOCHf8yk3pEsH6PZYA==", + "version": "1.14.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/compiler/-/compiler-1.14.0.tgz", + "integrity": "sha1-2FXCBu7K+j54eOf0JVthKC8FP0Y=", "dev": true, "license": "MIT", "dependencies": { @@ -1668,8 +1618,8 @@ "prettier": "^3.8.1", "semver": "^7.7.4", "tar": "^7.5.13", - "temporal-polyfill": "^0.3.2", - "vscode-languageserver": "^9.0.1", + "temporal-polyfill": "^1.0.1", + "vscode-languageserver": "^10.0.0", "vscode-languageserver-textdocument": "^1.0.12", "yaml": "^2.8.3", "yargs": "^18.0.0" @@ -1683,31 +1633,30 @@ } }, "node_modules/@typespec/events": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.83.0.tgz", - "integrity": "sha512-3EP1EIjdLgwStgd2rGWaF/QqY7YRAt+DIYnnYG2VsdPwa8s2t6K6eJ9YJDXveeHImAkHs+cpFuwxnjKMl4hOyw==", + "version": "0.84.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/events/-/events-0.84.0.tgz", + "integrity": "sha1-U6JW0cqeb0+n5fCjTbaW3DlOYPk=", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@typespec/http": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.13.0.tgz", - "integrity": "sha512-tf8XFddU6g1MZSAVCLC/0Xa4fNfUO0CcHe6PWpmC3bvUojxMnpRcERI2DdoRJ+aycB9Q+Z8wN8bJO3up6u+sCw==", + "version": "1.14.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/http/-/http-1.14.0.tgz", + "integrity": "sha1-La9yB2Ny8FhnXSBbst9wYQBiOq4=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/streams": "^0.83.0" + "@typespec/compiler": "^1.14.0", + "@typespec/streams": "^0.84.0" }, "peerDependenciesMeta": { "@typespec/streams": { @@ -1716,30 +1665,32 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.38", - "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.38.tgz", - "integrity": "sha512-/DlR8P93iFhULlLYDUy+aSkOW2udDrHdIfdIHko8aFnmfC5QGXE2fcFphtNlJHCQEYTdZwfAxmBu/TsEygR8jw==", + "version": "0.1.0-alpha.40", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/http-specs/-/http-specs-0.1.0-alpha.40.tgz", + "integrity": "sha1-Jbgrft+poBvuGMqqGR+shaf07Kk=", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.14", - "@typespec/spector": "^0.1.0-alpha.25" + "@typespec/spec-api": "^0.1.0-alpha.15", + "@typespec/spector": "^0.1.0-alpha.27" }, "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/http": "^1.13.0", - "@typespec/rest": "^0.83.0", - "@typespec/versioning": "^0.83.0", - "@typespec/xml": "^0.83.0" + "@typespec/compiler": "^1.14.0", + "@typespec/events": "^0.84.0", + "@typespec/http": "^1.14.0", + "@typespec/rest": "^0.84.0", + "@typespec/sse": "^0.84.0", + "@typespec/versioning": "^0.84.0", + "@typespec/xml": "^0.84.0" } }, "node_modules/@typespec/json-schema": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typespec/json-schema/-/json-schema-1.13.0.tgz", - "integrity": "sha512-o5yxs4aGhfFTkVNAkpFlO3LP2O8kWHQUgBzZ0s6tcbFlElGH86jUsdesT8O5ijoA0Cpa//m39wwxIcmBB2DiiA==", + "version": "1.14.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/json-schema/-/json-schema-1.14.0.tgz", + "integrity": "sha1-AXSggJEiLF0y3wDwLl2Wjt0ypZs=", "dev": true, "license": "MIT", "dependencies": { @@ -1750,69 +1701,68 @@ "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@typespec/library-linter": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/library-linter/-/library-linter-0.83.0.tgz", - "integrity": "sha512-pivCXKxVUEM/1PHAVOTy4NpTUTg2AikSeXN5R3HeHhkboHS203sSdsussKgvKHi2QbsaCYt2srTN29/fo+HcyQ==", + "version": "0.84.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/library-linter/-/library-linter-0.84.0.tgz", + "integrity": "sha1-gz2qEsp+6fA6+EC4AMKVprOfrso=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@typespec/openapi": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.13.0.tgz", - "integrity": "sha512-omPc9n+LM2WvjYwnIf31RCxmG17fFUOVLBRsWg4T1mbcsNCj4grnNP7Lwt+irIZCiKtmLKxq3ViE7jYixCkZ3g==", + "version": "1.14.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/openapi/-/openapi-1.14.0.tgz", + "integrity": "sha1-uwjWOV3VwWP59UXlR2xVUuzyCGc=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/http": "^1.13.0" + "@typespec/compiler": "^1.14.0", + "@typespec/http": "^1.14.0" } }, "node_modules/@typespec/rest": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.83.0.tgz", - "integrity": "sha512-WMEwEe1kdaOdZ0c+ct5BVmTSBXkrPniUYDWCz3K52T4in2dNc7J6YGP6tL8bXgQz5B0CsP0VNO12N+UysQDsLw==", + "version": "0.84.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/rest/-/rest-0.84.0.tgz", + "integrity": "sha1-kMLB39G8geZbiA3EEdQBaqteuuA=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/http": "^1.13.0" + "@typespec/compiler": "^1.14.0", + "@typespec/http": "^1.14.0" } }, "node_modules/@typespec/spec-api": { - "version": "0.1.0-alpha.14", - "resolved": "https://registry.npmjs.org/@typespec/spec-api/-/spec-api-0.1.0-alpha.14.tgz", - "integrity": "sha512-MpLVtJZMsONMB9Di9aiXRbbihqa/+4MmbDHpuwd3ka39wtRhcA3sbFQY/+oU5zVEfEAldGgVkenFd2wnoI/xkQ==", + "version": "0.1.0-alpha.15", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/spec-api/-/spec-api-0.1.0-alpha.15.tgz", + "integrity": "sha1-FvthJPmh0u+gw9SAUbchhndg3tQ=", "dev": true, "license": "MIT", "dependencies": { - "deep-equal": "^2.2.3", "express": "^5.2.1", - "xml2js": "^0.6.2" + "fast-xml-parser": "^5.7.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@typespec/spec-coverage-sdk": { "version": "0.1.0-alpha.16", - "resolved": "https://registry.npmjs.org/@typespec/spec-coverage-sdk/-/spec-coverage-sdk-0.1.0-alpha.16.tgz", - "integrity": "sha512-qwSnuE+CXjv4mn2uhioTVlaO4GjypR4ZtbkSoLmWA677ggYmoAjIDpyNgT1tjsc1lDKVtSiPvGhM9XFKExVmbQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/spec-coverage-sdk/-/spec-coverage-sdk-0.1.0-alpha.16.tgz", + "integrity": "sha1-5giTADH6pjWV0xMTviGRlCL624c=", "dev": true, "license": "MIT", "dependencies": { @@ -1828,8 +1778,8 @@ }, "node_modules/@typespec/spec-coverage-sdk/node_modules/@types/node": { "version": "25.3.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", - "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/node/-/node-25.3.5.tgz", + "integrity": "sha1-vsy1kVVh96mXCs5UetRNbNvzm0Y=", "dev": true, "license": "MIT", "dependencies": { @@ -1838,116 +1788,69 @@ }, "node_modules/@typespec/spec-coverage-sdk/node_modules/undici-types": { "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha1-KTV6iee3ykrvO/D9P9DNc4hCKek=", "dev": true, "license": "MIT" }, "node_modules/@typespec/spector": { - "version": "0.1.0-alpha.25", - "resolved": "https://registry.npmjs.org/@typespec/spector/-/spector-0.1.0-alpha.25.tgz", - "integrity": "sha512-KxMiwA/+XDWpZOdhr7TbnsR8ppXVi+edFa9hdUuerOGQzzALbSeQYUJLUr4RErRiHpqg2/P4FyJ2E0eiA2fTYA==", + "version": "0.1.0-alpha.27", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/spector/-/spector-0.1.0-alpha.27.tgz", + "integrity": "sha1-aA4cucLEbAIR6ZLH0llZuaVOMMY=", "dev": true, "license": "MIT", "dependencies": { - "@azure/identity": "~4.13.0", - "@typespec/compiler": "^1.11.0", - "@typespec/http": "^1.11.0", - "@typespec/rest": "^0.81.0", - "@typespec/spec-api": "^0.1.0-alpha.14", + "@azure/identity": "^4.13.1", + "@typespec/compiler": "^1.14.0", + "@typespec/http": "^1.14.0", + "@typespec/rest": "^0.84.0", + "@typespec/spec-api": "^0.1.0-alpha.15", "@typespec/spec-coverage-sdk": "^0.1.0-alpha.16", - "@typespec/versioning": "^0.81.0", - "ajv": "~8.18.0", - "body-parser": "^2.2.2", - "deep-equal": "^2.2.3", + "@typespec/versioning": "^0.84.0", + "ajv": "^8.18.0", "express": "^5.2.1", - "globby": "~16.1.1", "micromatch": "^4.0.8", "morgan": "^1.10.1", - "multer": "^2.1.1", - "picocolors": "~1.1.1", - "source-map-support": "~0.5.21", - "xml2js": "^0.6.2", - "yaml": "~2.8.2", - "yargs": "~18.0.0" + "multer": "^2.2.0", + "picocolors": "^1.1.1", + "source-map-support": "^0.5.21", + "yaml": "^2.8.3", + "yargs": "^18.0.0" }, "bin": { "tsp-spector": "cmd/cli.mjs" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@typespec/spector/node_modules/@typespec/rest": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.81.0.tgz", - "integrity": "sha512-qQXZRKEvq5aNlDFEUqBiiXXPIFyr/+PWgBY0kIrnhyZzMjfUqPInkB12QgXpVp2O2Wm3jmETJD45SaLHTCYBbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@typespec/compiler": "^1.11.0", - "@typespec/http": "^1.11.0" - } - }, - "node_modules/@typespec/spector/node_modules/@typespec/versioning": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.81.0.tgz", - "integrity": "sha512-5bha4t64xA85zLY8VGm/6jNd2kwPHzjPq/dlCUjtgGfGXv2R6Ow/YIukqhqZnwnIgNAIlZ7nguekRMRx+2oO2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@typespec/compiler": "^1.11.0" - } - }, - "node_modules/@typespec/spector/node_modules/yaml": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", - "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" + "node": ">=22.0.0" } }, "node_modules/@typespec/sse": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.83.0.tgz", - "integrity": "sha512-04WNaju2rwBbcF5pG+HrKQtdcrmSGuTVziLHNA9XOqj1qM7Uon3+wo2g+ZZ3Z6tngfqQoTCPyDcRHqZtGRdNuw==", + "version": "0.84.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/sse/-/sse-0.84.0.tgz", + "integrity": "sha1-dkP/3P+tvI4Q2SV3oRz/F2JMVXo=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0", - "@typespec/events": "^0.83.0", - "@typespec/http": "^1.13.0", - "@typespec/streams": "^0.83.0" + "@typespec/compiler": "^1.14.0", + "@typespec/events": "^0.84.0", + "@typespec/http": "^1.14.0", + "@typespec/streams": "^0.84.0" } }, "node_modules/@typespec/streams": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.83.0.tgz", - "integrity": "sha512-wbO6sdH1Uf+UwjxxsWdHQkjJ3wwiYsAKI+L66qnDYVXAFe02sUdMKd0mxH5o9ipGXE52MZ+yvZ52vHAD+g3RFQ==", + "version": "0.84.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/streams/-/streams-0.84.0.tgz", + "integrity": "sha1-Bm3D76chBKlcou2jj913xFfTBI4=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@typespec/ts-http-runtime": { @@ -1965,20 +1868,20 @@ } }, "node_modules/@typespec/tspd": { - "version": "0.75.0", - "resolved": "https://registry.npmjs.org/@typespec/tspd/-/tspd-0.75.0.tgz", - "integrity": "sha512-lGCpN5aM1O8utVH+6c7UMv9IZtEKlxc4O5blxp06TdnYWjOxyOEm+R9BBzaY7aq6Jtj/YamdDnMvzV42y/F10Q==", + "version": "0.76.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/tspd/-/tspd-0.76.0.tgz", + "integrity": "sha1-2EBsg89DGq4Mzn/hZTwowkgAOBA=", "dev": true, "license": "MIT", "dependencies": { - "@alloy-js/core": "^0.23.0", - "@alloy-js/markdown": "^0.23.0", - "@alloy-js/typescript": "^0.23.0", + "@alloy-js/core": "^0.24.1", + "@alloy-js/markdown": "^0.24.0", + "@alloy-js/typescript": "^0.24.0", "@microsoft/api-extractor": "^7.58.1", "@microsoft/api-extractor-model": "^7.33.5", "@microsoft/tsdoc": "^0.16.0", "@microsoft/tsdoc-config": "^0.18.1", - "@typespec/compiler": "^1.13.0", + "@typespec/compiler": "^1.14.0", "picocolors": "^1.1.1", "prettier": "^3.8.1", "typedoc": "^0.28.19", @@ -1994,29 +1897,29 @@ } }, "node_modules/@typespec/versioning": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.83.0.tgz", - "integrity": "sha512-nE66ta0ixpHB6FQpSzqnj8QnVfgFsxeK/4Xv+DxYx2nB/w18f6VjkF+hW+A/zs1tZIYvBZVbCNa/Rcr8zM6fhg==", + "version": "0.84.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/versioning/-/versioning-0.84.0.tgz", + "integrity": "sha1-YS06C7uMMWXKp7vwuy8qV8kjr38=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@typespec/xml": { - "version": "0.83.0", - "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.83.0.tgz", - "integrity": "sha512-2/dtAD8jGPkIdwpQ1G1P+5+qdMPeafQiIKCd8NdAnOo0w9OZ59Io52jINm9HdN8+FcbOrqK8+B2N9rlPRj7PqA==", + "version": "0.84.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@typespec/xml/-/xml-0.84.0.tgz", + "integrity": "sha1-aP99jZ3+wHS7f9mMJbEUT4Py7+g=", "dev": true, "license": "MIT", "engines": { "node": ">=22.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.13.0" + "@typespec/compiler": "^1.14.0" } }, "node_modules/@vitest/coverage-v8": { @@ -2186,26 +2089,26 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.34", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.34.tgz", - "integrity": "sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==", + "version": "3.5.40", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@vue/reactivity/-/reactivity-3.5.40.tgz", + "integrity": "sha1-kTeRcqnp2rpnN8aTE4ISeXbIMLo=", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.34" + "@vue/shared": "3.5.40" } }, "node_modules/@vue/shared": { - "version": "3.5.34", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.34.tgz", - "integrity": "sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==", + "version": "3.5.40", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@vue/shared/-/shared-3.5.40.tgz", + "integrity": "sha1-/AnRhx1mzZsBlZpZe0HXy2H3Fqg=", "dev": true, "license": "MIT" }, "node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha1-u89LpQdUZ/PyEx6rPP/HPC9deJU=", "dev": true, "license": "MIT", "dependencies": { @@ -2298,10 +2201,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anynum": { + "version": "1.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/anynum/-/anynum-1.0.1.tgz", + "integrity": "sha1-KqwA4I3603JsHUYuYNvC+DFlmkQ=", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/append-field": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=", "dev": true, "license": "MIT" }, @@ -2315,23 +2231,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2361,22 +2260,6 @@ "dev": true, "license": "MIT" }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2389,8 +2272,8 @@ }, "node_modules/basic-auth": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=", "dev": true, "license": "MIT", "dependencies": { @@ -2402,27 +2285,27 @@ }, "node_modules/basic-auth/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", "dev": true, "license": "MIT" }, "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "version": "2.3.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha1-bYZi9NjDNgKLismqJCUbDKZLpDc=", "dev": true, "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", + "content-type": "^2.0.0", "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" }, "engines": { "node": ">=18" @@ -2432,6 +2315,20 @@ "url": "https://opencollective.com/express" } }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha1-L7Pt5p3/oK94ynxM51iWgGOLVt8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/brace-expansion": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", @@ -2447,8 +2344,8 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/braces/-/braces-3.0.3.tgz", + "integrity": "sha1-SQMy9AkZRSJy1VqEgK3AxEE1h4k=", "dev": true, "license": "MIT", "dependencies": { @@ -2466,8 +2363,8 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=", "dev": true, "license": "MIT" }, @@ -2488,8 +2385,8 @@ }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha1-lm6japUC5DzbkUaWJSO5L1MfaJM=", "dev": true, "dependencies": { "streamsearch": "^1.1.0" @@ -2500,8 +2397,8 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha1-iwvuuYYFrfGxKPpDhkA8AJ4CIaU=", "dev": true, "license": "MIT", "engines": { @@ -2610,29 +2507,10 @@ "node": ">=12" } }, - "node_modules/call-bind": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=", "dev": true, "license": "MIT", "dependencies": { @@ -2645,8 +2523,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=", "dev": true, "license": "MIT", "dependencies": { @@ -2696,8 +2574,8 @@ }, "node_modules/cli-table3": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha1-ATuRNRdic5wWqVZ8IaBGMuRJvy8=", "dev": true, "license": "MIT", "dependencies": { @@ -2811,8 +2689,8 @@ }, "node_modules/concat-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha1-QUz1r3kKSMYKub5FJ9VtXkETPLE=", "dev": true, "engines": [ "node >= 6.0" @@ -2827,8 +2705,8 @@ }, "node_modules/content-disposition": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha1-89t4nHUtRVZMx+nh4LMXkNSjjhc=", "dev": true, "license": "MIT", "engines": { @@ -2841,8 +2719,8 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha1-i3cxYmVtHRCGeEyPI6VM5tc9eRg=", "dev": true, "license": "MIT", "engines": { @@ -2858,8 +2736,8 @@ }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha1-VWNpxHKiupEPKXmJG1JrNDYjftc=", "dev": true, "license": "MIT", "engines": { @@ -2868,8 +2746,8 @@ }, "node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha1-V8f8PMKTrKuf7FTXPhVpDr5KF5M=", "dev": true, "license": "MIT", "engines": { @@ -2908,39 +2786,6 @@ } } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/default-browser": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", @@ -2969,24 +2814,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -2999,28 +2826,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/depd/-/depd-2.0.0.tgz", + "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=", "dev": true, "license": "MIT", "engines": { @@ -3038,9 +2847,9 @@ } }, "node_modules/devalue": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", - "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "version": "5.8.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/devalue/-/devalue-5.8.2.tgz", + "integrity": "sha1-sJZE+gesseIf4fhB4MhOMosIQZY=", "dev": true, "license": "MIT" }, @@ -3056,8 +2865,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", "dev": true, "license": "MIT", "dependencies": { @@ -3087,8 +2896,8 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true, "license": "MIT" }, @@ -3101,8 +2910,8 @@ }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha1-e46omAd9fkCdOsRUdOo46vCFelg=", "dev": true, "license": "MIT", "engines": { @@ -3140,8 +2949,8 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", "dev": true, "license": "MIT", "engines": { @@ -3158,27 +2967,6 @@ "node": ">= 0.4" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-module-lexer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", @@ -3187,9 +2975,9 @@ "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha1-otCzcyBXJN+lJdI7DD4bHKWCyZs=", "dev": true, "license": "MIT", "dependencies": { @@ -3211,8 +2999,8 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true, "license": "MIT" }, @@ -3228,8 +3016,8 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, "license": "MIT", "engines": { @@ -3238,8 +3026,8 @@ }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", "dev": true, "license": "MIT", "engines": { @@ -3258,8 +3046,8 @@ }, "node_modules/express": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/express/-/express-5.2.1.tgz", + "integrity": "sha1-jyHRW20yf5K0eU7PjLCKcvlWrAQ=", "dev": true, "license": "MIT", "dependencies": { @@ -3307,23 +3095,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, "node_modules/fast-string-truncated-width": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", @@ -3369,9 +3140,9 @@ } }, "node_modules/fast-xml-builder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", - "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", + "version": "1.3.0", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fast-xml-builder/-/fast-xml-builder-1.3.0.tgz", + "integrity": "sha1-vISYBHlv5Hv5FQIt2Tmw/DC6RV0=", "dev": true, "funding": [ { @@ -3381,14 +3152,14 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.5.0", - "xml-naming": "^0.1.0" + "path-expression-matcher": "^1.6.2", + "xml-naming": "^0.3.0" } }, "node_modules/fast-xml-parser": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.8.0.tgz", - "integrity": "sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==", + "version": "5.10.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fast-xml-parser/-/fast-xml-parser-5.10.1.tgz", + "integrity": "sha1-GTE/fJOGxH+kod5SdUe3PtLPzt4=", "dev": true, "funding": [ { @@ -3398,26 +3169,17 @@ ], "license": "MIT", "dependencies": { - "@nodable/entities": "^2.1.0", + "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.3.0", - "xml-naming": "^0.1.0" + "is-unsafe": "^2.0.0", + "path-expression-matcher": "^1.6.2", + "strnum": "^2.4.1", + "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fflate": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", @@ -3427,8 +3189,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha1-RCZdPKwH4+p9wkdRY4BkN1SgUpI=", "dev": true, "license": "MIT", "dependencies": { @@ -3440,8 +3202,8 @@ }, "node_modules/finalhandler": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha1-osUXplWYUrzbBtH4vX9Rto+tgJk=", "dev": true, "license": "MIT", "dependencies": { @@ -3484,22 +3246,6 @@ "dev": true, "license": "ISC" }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -3519,8 +3265,8 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=", "dev": true, "license": "MIT", "engines": { @@ -3529,8 +3275,8 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha1-jdffahs6Gzpc8YbAWl3SZ2ImNaQ=", "dev": true, "license": "MIT", "engines": { @@ -3577,16 +3323,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3612,8 +3348,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=", "dev": true, "license": "MIT", "dependencies": { @@ -3637,8 +3373,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=", "dev": true, "license": "MIT", "dependencies": { @@ -3674,51 +3410,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz", - "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.5", - "is-path-inside": "^4.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -3728,19 +3430,6 @@ "dev": true, "license": "ISC" }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3751,23 +3440,10 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", "dev": true, "license": "MIT", "engines": { @@ -3777,22 +3453,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", @@ -3815,8 +3475,8 @@ }, "node_modules/http-errors": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha1-NtL2W8kJyHkAGN02+02T2myq4Gs=", "dev": true, "license": "MIT", "dependencies": { @@ -3877,16 +3537,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -3899,117 +3549,21 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", "dev": true, "license": "ISC" }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.16.2", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", @@ -4026,23 +3580,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -4058,16 +3595,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4078,19 +3605,6 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -4109,85 +3623,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha1-Qv+fhCBsGZHSbev1IN1cAQQt0vM=", "dev": true, "license": "MIT" }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-safe-filename": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", @@ -4201,70 +3653,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-unicode-supported": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", @@ -4278,35 +3666,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/is-unsafe": { + "version": "2.0.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-unsafe/-/is-unsafe-2.0.0.tgz", + "integrity": "sha1-wNzk4GdCZi3eJjYBYOQU6kh9ouk=", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/is-wsl": { "version": "3.1.1", @@ -4323,13 +3694,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4913,8 +4277,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=", "dev": true, "license": "MIT", "engines": { @@ -4930,8 +4294,8 @@ }, "node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha1-ardLjy0zIPIGSyqHo455Mf86VWE=", "dev": true, "license": "MIT", "engines": { @@ -4940,8 +4304,8 @@ }, "node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha1-6pIvZgY1oiSe5WXgRJ+VHmtgOAg=", "dev": true, "license": "MIT", "engines": { @@ -4951,20 +4315,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "license": "MIT", "dependencies": { @@ -4977,8 +4331,8 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha1-zds+5PnGRTDf9kAjZmHULLajFPU=", "dev": true, "license": "MIT", "engines": { @@ -4987,8 +4341,8 @@ }, "node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=", "dev": true, "license": "MIT", "dependencies": { @@ -5043,8 +4397,8 @@ }, "node_modules/morgan": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.11.0.tgz", - "integrity": "sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/morgan/-/morgan-1.11.0.tgz", + "integrity": "sha1-mEZLhTiALxTp5TdOviOsNkzWF+g=", "dev": true, "license": "MIT", "dependencies": { @@ -5064,8 +4418,8 @@ }, "node_modules/morgan/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "license": "MIT", "dependencies": { @@ -5074,8 +4428,8 @@ }, "node_modules/morgan/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "license": "MIT" }, @@ -5096,9 +4450,9 @@ "license": "MIT" }, "node_modules/multer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-2.1.1.tgz", - "integrity": "sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A==", + "version": "2.2.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/multer/-/multer-2.2.0.tgz", + "integrity": "sha1-8AUmjKgWMkunM147SBZolqP6XXk=", "dev": true, "license": "MIT", "dependencies": { @@ -5117,8 +4471,8 @@ }, "node_modules/multer/node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, "license": "MIT", "engines": { @@ -5127,8 +4481,8 @@ }, "node_modules/multer/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", "dev": true, "license": "MIT", "engines": { @@ -5137,8 +4491,8 @@ }, "node_modules/multer/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", "dev": true, "license": "MIT", "dependencies": { @@ -5150,8 +4504,8 @@ }, "node_modules/multer/node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", "dev": true, "license": "MIT", "dependencies": { @@ -5203,8 +4557,8 @@ }, "node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha1-tskbtHFy1p+Tz9fDV7u1KQGbX2o=", "dev": true, "license": "MIT", "engines": { @@ -5213,58 +4567,10 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, "engines": { "node": ">= 0.4" }, @@ -5285,8 +4591,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha1-WMjEQRblSEWtV/FKsQsDUzGErD8=", "dev": true, "license": "MIT", "dependencies": { @@ -5298,8 +4604,8 @@ }, "node_modules/on-headers": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha1-WdpPkcRfX5icbkvO3Fo7Cu1w/2U=", "dev": true, "license": "MIT", "engines": { @@ -5308,8 +4614,8 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "license": "ISC", "dependencies": { @@ -5375,8 +4681,8 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", "dev": true, "license": "MIT", "engines": { @@ -5394,9 +4700,9 @@ } }, "node_modules/path-expression-matcher": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", - "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "version": "1.6.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-expression-matcher/-/path-expression-matcher-1.6.2.tgz", + "integrity": "sha1-VnxzwHGX6dzvJOkO3NxXEFZZkWg=", "dev": true, "funding": [ { @@ -5445,8 +4751,8 @@ }, "node_modules/path-to-regexp": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha1-eVxCDE98pFxbiHNm9iLuDJhSzM0=", "dev": true, "license": "MIT", "funding": { @@ -5470,8 +4776,8 @@ }, "node_modules/picomatch": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha1-WpQpFeJrNy3A8OZ1MUmhbmscVgE=", "dev": true, "license": "MIT", "engines": { @@ -5491,16 +4797,6 @@ "node": ">=4" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { "version": "8.5.15", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", @@ -5548,8 +4844,8 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", "dev": true, "license": "MIT", "dependencies": { @@ -5571,13 +4867,14 @@ } }, "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.15.3", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/qs/-/qs-6.15.3.tgz", + "integrity": "sha1-doUhMqWO1cfA72fkRBubtdYGGzs=", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -5586,41 +4883,24 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha1-1/Gb6BK7YnIUcrRdO+IZ7wlXK0c=", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha1-PjraWuVWj5CV2EN2/TpJuPsAClE=", "dev": true, "license": "MIT", "dependencies": { @@ -5635,8 +4915,8 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=", "dev": true, "license": "MIT", "dependencies": { @@ -5648,27 +4928,6 @@ "node": ">= 6" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5711,17 +4970,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", @@ -5778,8 +5026,8 @@ }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/router/-/router-2.2.0.tgz", + "integrity": "sha1-AZvmILcRyHZBFnzHm5kJDwCxRu8=", "dev": true, "license": "MIT", "dependencies": { @@ -5805,30 +5053,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5849,24 +5073,6 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5874,16 +5080,6 @@ "dev": true, "license": "MIT" }, - "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -5898,8 +5094,8 @@ }, "node_modules/send": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/send/-/send-1.2.1.tgz", + "integrity": "sha1-nqt0O4dPNVD0CiaGe/KGrWDT8+0=", "dev": true, "license": "MIT", "dependencies": { @@ -5925,8 +5121,8 @@ }, "node_modules/serve-static": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha1-fxhqSk5fW2Y616QpT/G/N88OmKk=", "dev": true, "license": "MIT", "dependencies": { @@ -5943,44 +5139,10 @@ "url": "https://opencollective.com/express" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=", "dev": true, "license": "ISC" }, @@ -6008,15 +5170,15 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha1-6gLGLgXcS+pn1EQvD7ce4ZL44Ks=", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -6029,8 +5191,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha1-wuC1oUpUCuvuO7xsP4ZmzJtQkSc=", "dev": true, "license": "MIT", "dependencies": { @@ -6046,8 +5208,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", "dev": true, "license": "MIT", "dependencies": { @@ -6065,8 +5227,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", "dev": true, "license": "MIT", "dependencies": { @@ -6118,19 +5280,6 @@ "node": ">=18" } }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6153,8 +5302,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=", "dev": true, "license": "MIT", "dependencies": { @@ -6178,8 +5327,8 @@ }, "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha1-j3XuzvdlteHPzcCA2llAntQk44I=", "dev": true, "license": "MIT", "engines": { @@ -6193,24 +5342,10 @@ "dev": true, "license": "MIT" }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha1-QE3R4iR8qUr1VOhBqO8OqiONp2Q=", "dev": true, "engines": { "node": ">=10.0.0" @@ -6218,8 +5353,8 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=", "dev": true, "license": "MIT", "dependencies": { @@ -6295,9 +5430,9 @@ } }, "node_modules/strnum": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", - "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", + "version": "2.4.1", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strnum/-/strnum-2.4.1.tgz", + "integrity": "sha1-hUF/aDETut6g/n4XInZ2+In/flg=", "dev": true, "funding": [ { @@ -6305,7 +5440,10 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "anynum": "^1.0.1" + } }, "node_modules/supports-color": { "version": "8.1.1", @@ -6354,21 +5492,29 @@ } }, "node_modules/temporal-polyfill": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.3.2.tgz", - "integrity": "sha512-TzHthD/heRK947GNiSu3Y5gSPpeUDH34+LESnfsq8bqpFhsB79HFBX8+Z834IVX68P3EUyRPZK5bL/1fh437Eg==", + "version": "1.0.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/temporal-polyfill/-/temporal-polyfill-1.0.1.tgz", + "integrity": "sha1-lWd9+PpWcaeY6KqztY9FlJGIDZ8=", "dev": true, "license": "MIT", "dependencies": { - "temporal-spec": "0.3.1" + "temporal-spec": "1.0.0", + "temporal-utils": "1.0.1" } }, "node_modules/temporal-spec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.3.1.tgz", - "integrity": "sha512-B4TUhezh9knfSIMwt7RVggApDRJZo73uZdj8AacL2mZ8RP5KtLianh2MXxL06GN9ESYiIsiuoLQhgVfwe55Yhw==", + "version": "1.0.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/temporal-spec/-/temporal-spec-1.0.0.tgz", + "integrity": "sha1-gep3lAsAmndZ/SH0R9wPK3VHwco=", "dev": true, - "license": "ISC" + "license": "Apache-2.0" + }, + "node_modules/temporal-utils": { + "version": "1.0.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/temporal-utils/-/temporal-utils-1.0.1.tgz", + "integrity": "sha1-+vJ24hZRLM0VdaRwWljXOgka64I=", + "dev": true, + "license": "MIT" }, "node_modules/test-exclude": { "version": "7.0.2", @@ -6647,8 +5793,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", "dev": true, "license": "MIT", "dependencies": { @@ -6660,8 +5806,8 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=", "dev": true, "license": "MIT", "engines": { @@ -6686,8 +5832,8 @@ }, "node_modules/type-is": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "resolved": "https://ms-feed-12.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha1-cdGnBTKTWC4WrJ8+uvGrmqSeVXA=", "dev": true, "license": "MIT", "dependencies": { @@ -6705,8 +5851,8 @@ }, "node_modules/type-is/node_modules/content-type": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha1-L7Pt5p3/oK94ynxM51iWgGOLVt8=", "dev": true, "license": "MIT", "engines": { @@ -6719,8 +5865,8 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true, "license": "MIT" }, @@ -6805,19 +5951,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -6830,8 +5963,8 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "license": "MIT", "engines": { @@ -6840,8 +5973,8 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "license": "MIT" }, @@ -6862,8 +5995,8 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, "license": "MIT", "engines": { @@ -7065,9 +6198,9 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "version": "9.0.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz", + "integrity": "sha1-XoSKSt3wBLYzcVb3hYoAbgg4tPU=", "dev": true, "license": "MIT", "engines": { @@ -7075,27 +6208,27 @@ } }, "node_modules/vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "version": "10.1.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-languageserver/-/vscode-languageserver-10.1.0.tgz", + "integrity": "sha1-6IB0MTmF2kpsCPrCvr1zN5ykv8U=", "dev": true, "license": "MIT", "dependencies": { - "vscode-languageserver-protocol": "3.17.5" + "vscode-languageserver-protocol": "3.18.2" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "version": "3.18.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz", + "integrity": "sha1-5/s25royvHumIiV623imEmJz3cU=", "dev": true, "license": "MIT", "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" + "vscode-jsonrpc": "9.0.1", + "vscode-languageserver-types": "3.18.0" } }, "node_modules/vscode-languageserver-textdocument": { @@ -7106,9 +6239,9 @@ "license": "MIT" }, "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "version": "3.18.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz", + "integrity": "sha1-EyMhIpYEg2urcQyXSH5s2vub17s=", "dev": true, "license": "MIT" }, @@ -7128,67 +6261,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -7315,15 +6387,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "license": "ISC" }, "node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "version": "8.21.1", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ws/-/ws-8.21.1.tgz", + "integrity": "sha1-BFZQzUsSB4CedUcUYiPDgUqa9YY=", "dev": true, "license": "MIT", "engines": { @@ -7358,9 +6430,9 @@ } }, "node_modules/xml-naming": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", - "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "version": "0.3.0", + "resolved": "https://ms-feed-2.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/xml-naming/-/xml-naming-0.3.0.tgz", + "integrity": "sha1-RsHhi/4oWEeZgt0qzPNNFudJ7aI=", "dev": true, "funding": [ { @@ -7373,30 +6445,6 @@ "node": ">=16.0.0" } }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/packages/http-client-csharp/package.json b/packages/http-client-csharp/package.json index 4f0d0f5f902..108d9509d37 100644 --- a/packages/http-client-csharp/package.json +++ b/packages/http-client-csharp/package.json @@ -61,6 +61,7 @@ "@azure-tools/typespec-azure-core": ">=0.69.0 <0.70.0 || ~0.70.0-0", "@azure-tools/typespec-client-generator-core": ">=0.69.2 <0.70.0 || ~0.70.0-0", "@typespec/compiler": "^1.13.0", + "@typespec/events": ">=0.83.0 <0.84.0 || ~0.84.0-0", "@typespec/http": "^1.13.0", "@typespec/openapi": "^1.13.0", "@typespec/rest": ">=0.83.0 <0.84.0 || ~0.84.0-0", @@ -69,25 +70,26 @@ "@typespec/versioning": ">=0.83.0 <0.84.0 || ~0.84.0-0" }, "devDependencies": { - "@azure-tools/azure-http-specs": "0.1.0-alpha.42", - "@azure-tools/typespec-azure-core": "0.69.0", - "@azure-tools/typespec-client-generator-core": "0.69.2", + "@azure-tools/azure-http-specs": "0.1.0-alpha.43", + "@azure-tools/typespec-azure-core": "0.70.0", + "@azure-tools/typespec-client-generator-core": "0.70.0", "@microsoft/api-extractor": "^7.52.2", "@types/node": "~22.12.0", - "@typespec/compiler": "1.13.0", - "@typespec/http": "1.13.0", - "@typespec/http-specs": "0.1.0-alpha.38", - "@typespec/json-schema": "1.13.0", - "@typespec/library-linter": "0.83.0", - "@typespec/openapi": "1.13.0", - "@typespec/rest": "0.83.0", - "@typespec/spec-api": "0.1.0-alpha.14", - "@typespec/spector": "0.1.0-alpha.25", - "@typespec/sse": "0.83.0", - "@typespec/streams": "0.83.0", - "@typespec/tspd": "0.75.0", - "@typespec/versioning": "0.83.0", - "@typespec/xml": "0.83.0", + "@typespec/compiler": "1.14.0", + "@typespec/events": "0.84.0", + "@typespec/http": "1.14.0", + "@typespec/http-specs": "0.1.0-alpha.40", + "@typespec/json-schema": "1.14.0", + "@typespec/library-linter": "0.84.0", + "@typespec/openapi": "1.14.0", + "@typespec/rest": "0.84.0", + "@typespec/spec-api": "0.1.0-alpha.15", + "@typespec/spector": "0.1.0-alpha.27", + "@typespec/sse": "0.84.0", + "@typespec/streams": "0.84.0", + "@typespec/tspd": "0.76.0", + "@typespec/versioning": "0.84.0", + "@typespec/xml": "0.84.0", "@vitest/coverage-v8": "^4.1.8", "@vitest/ui": "^4.1.8", "c8": "^10.1.2", From f3a42e10ba4e96777bd21a03c11d70e45bfe3414 Mon Sep 17 00:00:00 2001 From: jolov Date: Wed, 29 Jul 2026 16:28:49 -0700 Subject: [PATCH 2/3] fix(http-client-csharp): return streaming protocol results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e02ee7d0-8d27-46f8-a856-222d6a938ecd --- .../Providers/ScmMethodProviderCollection.cs | 276 ++++++++++++++---- .../ScmMethodProviderCollectionTests.cs | 41 ++- .../Http/Streaming/Sse/SseTests.cs | 3 +- .../streaming/jsonl/src/Generated/Basic.cs | 4 +- .../Generated/StreamingJsonlModelFactory.cs | 1 - .../http/streaming/jsonl/tspCodeModel.json | 4 + .../Generated/Models/Info.Serialization.cs | 36 +++ .../sse/src/Generated/Models/Info.cs | 11 + .../Generated/Models/StreamingSseContext.cs | 2 +- .../http/streaming/sse/src/Generated/Named.cs | 4 +- .../streaming/sse/src/Generated/Retrieve.cs | 4 +- .../src/Generated/StreamingSseModelFactory.cs | 3 +- .../streaming/sse/src/Generated/Unnamed.cs | 6 +- 13 files changed, 312 insertions(+), 83 deletions(-) create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.Serialization.cs create mode 100644 packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.cs diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs index c42734626ed..32640daa862 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ScmMethodProviderCollection.cs @@ -87,8 +87,22 @@ protected virtual IReadOnlyList BuildMethods() { bool shouldMakeParametersRequired = ShouldMakeProtocolMethodParametersRequired(); - var syncProtocol = BuildProtocolMethod(_createRequestMethod, false, shouldMakeParametersRequired); var asyncProtocol = BuildProtocolMethod(_createRequestMethod, true, shouldMakeParametersRequired); + if (GetStreamingResponse() != null) + { + if (_generateConvenienceMethod && ProtocolMethodExists(asyncProtocol)) + { + return + [ + asyncProtocol, + BuildConvenienceMethod(asyncProtocol, true) + ]; + } + + return [asyncProtocol]; + } + + var syncProtocol = BuildProtocolMethod(_createRequestMethod, false, shouldMakeParametersRequired); if (_generateConvenienceMethod) { @@ -214,60 +228,31 @@ private ScmMethodProvider BuildConvenienceMethod(MethodProvider protocolMethod, } else if (streamingResponse != null) { - if (streamingResponse.StreamKind == "sse") - { - ValueExpression terminalPredicate = Null; - if (streamingResponse.TerminalEventValue != null) - { - var sseItemType = new CSharpType(typeof(SseItem<>), typeof(BinaryData)); - var item = new VariableExpression(sseItemType, "item"); - ValueExpression isTerminal = item.Property("Data") - .Invoke("ToString") - .Equal(Literal(streamingResponse.TerminalEventValue)); - if (streamingResponse.TerminalEventType != null) - { - isTerminal = item.Property("EventType") - .Equal(Literal(streamingResponse.TerminalEventType)) - .And(isTerminal); - } - terminalPredicate = new FuncExpression([item.Declaration], isTerminal); - } - - methodBody = - [ - .. GetStackVariablesForProtocolParamConversion(convenienceBodyParameters, out var declarations), - Declare("result", This.Invoke(protocolMethod.Signature, [.. GetProtocolMethodArguments(declarations)], isAsync).ToApi(), out ClientResponseApi result), - Return(Static(typeof(AsyncStreamingClientResult)).Invoke( - "CreateSse", - [ - result.GetRawResponse(), - terminalPredicate, - signatureParameters[^1] - ])) - ]; - } - else - { - var itemType = ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingResponse.ValueType) - ?? throw new InvalidOperationException("Unable to resolve JSON Lines stream item type."); - var jsonLinesContentType = new JsonLinesBinaryContentDefinition().Type.MakeGenericType([itemType]); - var deserializeMethod = streamingResponse.ValueType is InputModelType - ? "DeserializeModel" - : "DeserializeValue"; - methodBody = - [ - .. GetStackVariablesForProtocolParamConversion(convenienceBodyParameters, out var declarations), - Declare("result", This.Invoke(protocolMethod.Signature, [.. GetProtocolMethodArguments(declarations)], isAsync).ToApi(), out ClientResponseApi result), - Return(Static(typeof(AsyncStreamingClientResult)).Invoke( - "CreateJsonLines", - [ - result.GetRawResponse(), - Static(jsonLinesContentType).Property(deserializeMethod), - signatureParameters[^1] - ], - [itemType])) - ]; - } + var conversionStatements = GetStackVariablesForProtocolParamConversion( + convenienceBodyParameters, + out var declarations); + var protocolArguments = GetProtocolMethodArguments(declarations); + var requestOptions = protocolArguments[^1]; + methodBody = + [ + .. conversionStatements, + UsingDeclare( + "message", + ScmCodeModelGenerator.Instance.TypeFactory.HttpMessageApi.HttpMessageType, + This.Invoke(_createRequestMethod.Signature, protocolArguments), + out var message), + message.Property("BufferResponse").Assign(False).Terminate(), + Return(CreateStreamingResultExpression( + streamingResponse, + client.PipelineProperty.Invoke( + "ProcessMessageAsync", + [message, requestOptions], + true, + true, + extensionType: ScmCodeModelGenerator.Instance.ClientPipelineExtensionsDefinition.Type), + signatureParameters[^1], + useConvenienceType: true)) + ]; } else if (responseBodyType is null) { @@ -1238,6 +1223,7 @@ private ScmMethodProvider BuildProtocolMethod(MethodProvider createRequestMethod else { var processMessageName = isAsync ? "ProcessMessageAsync" : "ProcessMessage"; + var streamingResponse = GetStreamingResponse(); methodBody = [ UsingDeclare("message", ScmCodeModelGenerator.Instance.TypeFactory.HttpMessageApi.HttpMessageType, @@ -1246,8 +1232,19 @@ private ScmMethodProvider BuildProtocolMethod(MethodProvider createRequestMethod .. ServiceMethod.Operation.BufferResponse ? [] : new MethodBodyStatement[] { message.Property("BufferResponse").Assign(False).Terminate() }, - Return(ScmCodeModelGenerator.Instance.TypeFactory.ClientResponseApi.ToExpression().FromResponse(client - .PipelineProperty.Invoke(processMessageName, [message, requestOptionsParameter], isAsync, true, extensionType: ScmCodeModelGenerator.Instance.ClientPipelineExtensionsDefinition.Type))) + Return(streamingResponse != null + ? CreateStreamingResultExpression( + streamingResponse, + client.PipelineProperty.Invoke( + processMessageName, + [message, requestOptionsParameter], + isAsync, + true, + extensionType: ScmCodeModelGenerator.Instance.ClientPipelineExtensionsDefinition.Type), + cancellationToken: null, + useConvenienceType: false) + : ScmCodeModelGenerator.Instance.TypeFactory.ClientResponseApi.ToExpression().FromResponse(client + .PipelineProperty.Invoke(processMessageName, [message, requestOptionsParameter], isAsync, true, extensionType: ScmCodeModelGenerator.Instance.ClientPipelineExtensionsDefinition.Type))) ]; } @@ -1417,6 +1414,14 @@ private CSharpType GetResponseType(IReadOnlyList respons : ScmCodeModelGenerator.Instance.TypeFactory.ClientResponseApi.ClientCollectionResponseType; } + var streamingResponse = responses.FirstOrDefault(r => !r.IsErrorResponse)?.BodyType as InputStreamingType; + if (streamingResponse != null) + { + responseBodyType = GetRawStreamingItemType(streamingResponse); + var resultType = new CSharpType(typeof(AsyncStreamingClientResult<>), responseBodyType); + return new CSharpType(typeof(Task<>), resultType); + } + var returnType = ScmCodeModelGenerator.Instance.TypeFactory.ClientResponseApi.ClientResponseType; return isAsync ? new CSharpType(typeof(Task<>), returnType) : returnType; @@ -1427,9 +1432,7 @@ private CSharpType GetConvenienceReturnType(IReadOnlyList !r.IsErrorResponse); if (response?.BodyType is InputStreamingType streamingType) { - responseBodyType = streamingType.StreamKind == "sse" - ? new CSharpType(typeof(SseItem<>), typeof(BinaryData)) - : ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingType.ValueType); + responseBodyType = GetConvenienceStreamingItemType(streamingType); var resultType = new CSharpType( typeof(AsyncStreamingClientResult<>), responseBodyType ?? throw new InvalidOperationException("Unable to resolve streaming response type.")); @@ -1461,6 +1464,159 @@ private CSharpType GetConvenienceReturnType(IReadOnlyList), returnType) : returnType; } + private static CSharpType GetRawStreamingItemType(InputStreamingType streamingType) + => streamingType.StreamKind == "sse" + ? new CSharpType(typeof(SseItem<>), typeof(BinaryData)) + : typeof(BinaryData); + + private static CSharpType GetConvenienceStreamingItemType(InputStreamingType streamingType) + { + if (streamingType.StreamKind != "sse") + { + return ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingType.ValueType) + ?? throw new InvalidOperationException("Unable to resolve JSON Lines stream item type."); + } + + var payloadType = GetSseConveniencePayloadType(streamingType); + var payloadCSharpType = payloadType is null + ? typeof(BinaryData) + : ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(payloadType) + ?? throw new InvalidOperationException("Unable to resolve SSE stream item type."); + return new CSharpType(typeof(SseItem<>), payloadCSharpType); + } + + private static InputType? GetSseConveniencePayloadType(InputStreamingType streamingType) + { + if (streamingType.ValueType is not InputUnionType unionType) + { + return streamingType.ValueType; + } + + var payloadTypes = unionType.VariantTypes + .Where(type => type is not InputLiteralType literal || + !Equals(literal.Value, streamingType.TerminalEventValue)) + .ToArray(); + if (payloadTypes.Length == 0) + { + return null; + } + + var firstCSharpType = ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(payloadTypes[0]); + return firstCSharpType != null && + payloadTypes.Skip(1).All(type => + firstCSharpType.Equals( + ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(type))) + ? payloadTypes[0] + : null; + } + + private static ValueExpression CreateStreamingResultExpression( + InputStreamingType streamingType, + ValueExpression response, + ValueExpression? cancellationToken, + bool useConvenienceType) + { + if (streamingType.StreamKind == "sse") + { + var terminalPredicate = CreateSseTerminalPredicate(streamingType); + var payloadType = useConvenienceType + ? GetSseConveniencePayloadType(streamingType) + : null; + if (payloadType != null) + { + var payloadCSharpType = ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(payloadType) + ?? throw new InvalidOperationException("Unable to resolve SSE stream item type."); + var parser = CreateSseParser(payloadType, payloadCSharpType); + var arguments = cancellationToken != null + ? new ValueExpression[] { response, parser, terminalPredicate, cancellationToken } + : [response, parser, terminalPredicate]; + return Static(typeof(AsyncStreamingClientResult)).Invoke( + "CreateSse", + arguments, + [payloadCSharpType]); + } + + var rawArguments = cancellationToken != null + ? new ValueExpression[] { response, terminalPredicate, cancellationToken } + : terminalPredicate == Null + ? [response] + : [response, terminalPredicate]; + return Static(typeof(AsyncStreamingClientResult)).Invoke("CreateSse", rawArguments); + } + + if (!useConvenienceType) + { + return Static(typeof(AsyncStreamingClientResult)).Invoke( + "CreateJsonLines", + cancellationToken != null + ? [response, cancellationToken] + : [response]); + } + + var itemType = ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(streamingType.ValueType) + ?? throw new InvalidOperationException("Unable to resolve JSON Lines stream item type."); + var jsonLinesContentType = new JsonLinesBinaryContentDefinition().Type.MakeGenericType([itemType]); + var deserializeMethod = streamingType.ValueType is InputModelType + ? "DeserializeModel" + : "DeserializeValue"; + var jsonLinesArguments = cancellationToken != null + ? new ValueExpression[] + { + response, + Static(jsonLinesContentType).Property(deserializeMethod), + cancellationToken + } + : + [ + response, + Static(jsonLinesContentType).Property(deserializeMethod) + ]; + return Static(typeof(AsyncStreamingClientResult)).Invoke( + "CreateJsonLines", + jsonLinesArguments, + [itemType]); + } + + private static ValueExpression CreateSseTerminalPredicate(InputStreamingType streamingType) + { + if (streamingType.TerminalEventValue is null) + { + return Null; + } + + var sseItemType = new CSharpType(typeof(SseItem<>), typeof(BinaryData)); + var item = new VariableExpression(sseItemType, "item"); + ValueExpression isTerminal = item.Property("Data") + .Invoke("ToString") + .Equal(Literal(streamingType.TerminalEventValue)); + if (streamingType.TerminalEventType != null) + { + isTerminal = item.Property("EventType") + .Equal(Literal(streamingType.TerminalEventType)) + .And(isTerminal); + } + return new FuncExpression([item.Declaration], isTerminal); + } + + private static ValueExpression CreateSseParser( + InputType payloadType, + CSharpType payloadCSharpType) + { + var eventType = new VariableExpression(typeof(string), "_"); + var data = new VariableExpression(typeof(ReadOnlySpan), "data"); + var binaryData = Static(typeof(BinaryData)).Invoke( + "FromBytes", + [data.Invoke("ToArray")]); + var helperType = new JsonLinesBinaryContentDefinition().Type.MakeGenericType( + [payloadCSharpType]); + var deserializeMethod = payloadType is InputModelType + ? "DeserializeModel" + : "DeserializeValue"; + return new FuncExpression( + [eventType.Declaration, data.Declaration], + Static(helperType).Invoke(deserializeMethod, [binaryData])); + } + private CSharpType? GetResponseBodyType(InputType? responseType) { if (responseType is null) diff --git a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs index a36e887e7f5..7ce231ce967 100644 --- a/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs +++ b/packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs @@ -109,10 +109,21 @@ public void JsonLinesResponseGeneratesUnbufferedAsyncStreamingResult() Assert.IsNotNull(client); var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); - Assert.AreEqual(3, methodCollection.Count); + Assert.AreEqual(2, methodCollection.Count); Assert.IsFalse(methodCollection.Any(method => method.Signature.Name == "Receive" && - method.Signature.Parameters.All(parameter => parameter.Name != "options"))); + method.Signature.Parameters.Any(parameter => parameter.Name == "options"))); + + var rawProtocolMethod = methodCollection.Single(method => + method.Signature.Name == "ReceiveAsync" && + method.Signature.Parameters.Any(parameter => parameter.Name == "options")); + var expectedProtocolReturnType = new CSharpType( + typeof(Task<>), + new CSharpType(typeof(AsyncStreamingClientResult<>), typeof(BinaryData))); + Assert.IsTrue(rawProtocolMethod.Signature.ReturnType!.Equals(expectedProtocolReturnType)); + StringAssert.Contains( + "return global::System.ClientModel.AsyncStreamingClientResult.CreateJsonLines", + rawProtocolMethod.BodyStatements!.ToDisplayString()); var convenienceMethod = methodCollection.Single(method => method.Signature.Name == "ReceiveAsync" && @@ -142,10 +153,11 @@ public void SseResponseGeneratesUnbufferedAsyncStreamingResult() var eventType = InputFactory.Model( "Info", properties: [InputFactory.Property("desc", InputPrimitiveType.String, isRequired: true)]); + var eventUnion = InputFactory.Union([eventType], "SseEvents"); var streamType = new InputStreamingType( "SseStream", "Streaming.Sse.SseStream", - eventType, + eventUnion, ["text/event-stream"], streamKind: "sse", terminalEventValue: "[DONE]"); @@ -163,6 +175,22 @@ public void SseResponseGeneratesUnbufferedAsyncStreamingResult() Assert.IsNotNull(client); var methodCollection = new ScmMethodProviderCollection(serviceMethod, client!); + Assert.AreEqual(2, methodCollection.Count); + Assert.IsFalse(methodCollection.Any(method => method.Signature.Name == "Receive")); + + var rawProtocolMethod = methodCollection.Single(method => + method.Signature.Name == "ReceiveAsync" && + method.Signature.Parameters.Any(parameter => parameter.Name == "options")); + var expectedProtocolReturnType = new CSharpType( + typeof(Task<>), + new CSharpType( + typeof(AsyncStreamingClientResult<>), + new CSharpType(typeof(SseItem<>), typeof(BinaryData)))); + Assert.IsTrue(rawProtocolMethod.Signature.ReturnType!.Equals(expectedProtocolReturnType)); + StringAssert.Contains( + "return global::System.ClientModel.AsyncStreamingClientResult.CreateSse", + rawProtocolMethod.BodyStatements!.ToDisplayString()); + var convenienceMethod = methodCollection.Single(method => method.Signature.Name == "ReceiveAsync" && method.Signature.Parameters.All(parameter => parameter.Name != "options")); @@ -170,12 +198,17 @@ public void SseResponseGeneratesUnbufferedAsyncStreamingResult() typeof(Task<>), new CSharpType( typeof(AsyncStreamingClientResult<>), - new CSharpType(typeof(SseItem<>), typeof(BinaryData)))); + new CSharpType( + typeof(SseItem<>), + ScmCodeModelGenerator.Instance.TypeFactory.CreateCSharpType(eventType)!))); Assert.IsTrue(convenienceMethod.Signature.ReturnType!.Equals(expectedReturnType)); var body = convenienceMethod.BodyStatements!.ToDisplayString(); StringAssert.Contains( "return global::System.ClientModel.AsyncStreamingClientResult.CreateSse", body); + StringAssert.Contains( + "global::Sample.JsonLinesBinaryContent.DeserializeModel", + body); StringAssert.Contains( "item.Data.ToString() == \"[DONE]\"", body); diff --git a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs index f6bfa1387dd..bb06e9d5aeb 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector.Tests/Http/Streaming/Sse/SseTests.cs @@ -22,8 +22,7 @@ public Task Unnamed() => Test(async (host) => await foreach (var item in response) { Assert.AreEqual("message", item.EventType); - using var document = JsonDocument.Parse(item.Data.ToMemory()); - descriptions.Add(document.RootElement.GetProperty("desc").GetString()!); + descriptions.Add(item.Data.Desc); } CollectionAssert.AreEqual(new[] { "one", "two", "three" }, descriptions); diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs index 88189d6bfb4..663749f71ad 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/Basic.cs @@ -25,9 +25,7 @@ public partial class Basic public virtual Task SendAsync(IAsyncEnumerable stream, CancellationToken cancellationToken = default) => throw null; - public virtual ClientResult Receive(RequestOptions options) => throw null; - - public virtual Task ReceiveAsync(RequestOptions options) => throw null; + public virtual Task> ReceiveAsync(RequestOptions options) => throw null; public virtual Task> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; } diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs index d66e611a2f0..94a23b9ffff 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/src/Generated/StreamingJsonlModelFactory.cs @@ -2,7 +2,6 @@ #nullable disable -using System; using Streaming.Jsonl._Basic; namespace Streaming.Jsonl diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json index 692ad40fc9c..e7789a2b3fa 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json @@ -256,6 +256,7 @@ "valueType": { "$ref": "9" }, + "streamKind": "jsonl", "contentTypes": [ "application/jsonl" ], @@ -304,6 +305,7 @@ "valueType": { "$ref": "9" }, + "streamKind": "jsonl", "contentTypes": [ "application/jsonl" ], @@ -448,6 +450,7 @@ "valueType": { "$ref": "9" }, + "streamKind": "jsonl", "contentTypes": [ "application/jsonl" ], @@ -496,6 +499,7 @@ "valueType": { "$ref": "9" }, + "streamKind": "jsonl", "contentTypes": [ "application/jsonl" ], diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.Serialization.cs new file mode 100644 index 00000000000..c2968a95c9e --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace Streaming.Sse._Unnamed +{ + public partial class Info : IJsonModel + { + internal Info() => throw null; + + protected virtual Info PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) => throw null; + + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) => throw null; + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => throw null; + + Info IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => throw null; + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => throw null; + + public static explicit operator Info(ClientResult result) => throw null; + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) => throw null; + + Info IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + + protected virtual Info JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.cs new file mode 100644 index 00000000000..ad15d80be14 --- /dev/null +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/Info.cs @@ -0,0 +1,11 @@ +// + +#nullable disable + +namespace Streaming.Sse._Unnamed +{ + public partial class Info + { + public string Desc => throw null; + } +} diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs index b6935d97a4c..9f2a25d8a49 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Models/StreamingSseContext.cs @@ -3,12 +3,12 @@ #nullable disable using System.ClientModel.Primitives; -using Streaming.Sse._Named; using Streaming.Sse._Retrieve; using Streaming.Sse._Unnamed; namespace Streaming.Sse { + [ModelReaderWriterBuildable(typeof(Info))] [ModelReaderWriterBuildable(typeof(RetrievalRequest))] public partial class StreamingSseContext : ModelReaderWriterContext { diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs index 3beb52e1fbc..7a3b4396dcd 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Named.cs @@ -19,9 +19,7 @@ public partial class Named public ClientPipeline Pipeline => throw null; - public virtual ClientResult Receive(RequestOptions options) => throw null; - - public virtual Task ReceiveAsync(RequestOptions options) => throw null; + public virtual Task>> ReceiveAsync(RequestOptions options) => throw null; public virtual Task>> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; } diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs index 5e1432ef5fb..4c370184c10 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Retrieve.cs @@ -19,9 +19,7 @@ public partial class Retrieve public ClientPipeline Pipeline => throw null; - public virtual ClientResult Stream(BinaryContent content, RequestOptions options = null) => throw null; - - public virtual Task StreamAsync(BinaryContent content, RequestOptions options = null) => throw null; + public virtual Task>> StreamAsync(BinaryContent content, RequestOptions options = null) => throw null; public virtual Task>> StreamAsync(RetrievalRequest request, CancellationToken cancellationToken = default) => throw null; } diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs index e81bf5ea6ef..323ddf4742d 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/StreamingSseModelFactory.cs @@ -2,8 +2,6 @@ #nullable disable -using System.Collections.Generic; -using Streaming.Sse._Named; using Streaming.Sse._Retrieve; using Streaming.Sse._Unnamed; @@ -11,6 +9,7 @@ namespace Streaming.Sse { public static partial class StreamingSseModelFactory { + public static Info Info(string desc = default) => throw null; public static RetrievalRequest RetrievalRequest(string query = default) => throw null; } diff --git a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs index 111a4901f05..7370f4c5001 100644 --- a/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs +++ b/packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/src/Generated/Unnamed.cs @@ -19,10 +19,8 @@ public partial class Unnamed public ClientPipeline Pipeline => throw null; - public virtual ClientResult Receive(RequestOptions options) => throw null; + public virtual Task>> ReceiveAsync(RequestOptions options) => throw null; - public virtual Task ReceiveAsync(RequestOptions options) => throw null; - - public virtual Task>> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; + public virtual Task>> ReceiveAsync(CancellationToken cancellationToken = default) => throw null; } } From 976537f6893c62e5ca4319c2fe55fadcd380c393 Mon Sep 17 00:00:00 2001 From: jolov Date: Wed, 29 Jul 2026 16:48:33 -0700 Subject: [PATCH 3/3] fix(http-client-csharp): restore optional npm packages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e02ee7d0-8d27-46f8-a856-222d6a938ecd --- packages/http-client-csharp/package-lock.json | 529 ++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/packages/http-client-csharp/package-lock.json b/packages/http-client-csharp/package-lock.json index c88a1b2ab2e..aa0eb695b9a 100644 --- a/packages/http-client-csharp/package-lock.json +++ b/packages/http-client-csharp/package-lock.json @@ -445,6 +445,40 @@ "node": ">=0.1.90" } }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@gerrit0/mini-shiki": { "version": "3.23.0", "dev": true, @@ -879,6 +913,25 @@ "resolve": "~1.22.2" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, "node_modules/@nodable/entities": { "version": "3.0.0", "dev": true, @@ -912,6 +965,246 @@ "dev": true, "license": "MIT" }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/binding-win32-x64-msvc": { "version": "1.0.3", "cpu": [ @@ -1050,6 +1343,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/argparse": { "version": "1.0.38", "dev": true, @@ -2572,6 +2876,21 @@ "node": ">=14.14" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "dev": true, @@ -3048,6 +3367,216 @@ "lightningcss-win32-x64-msvc": "1.32.0" } }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lightningcss-win32-x64-msvc": { "version": "1.32.0", "cpu": [