@cratis/arc 20.10.2 → 20.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/dist/cjs/queries/ObservableQueryFor.d.ts.map +1 -1
  2. package/dist/cjs/queries/ObservableQueryFor.js +1 -2
  3. package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
  4. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.d.ts +2 -0
  5. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.d.ts.map +1 -0
  6. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts +2 -0
  7. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts.map +1 -0
  8. package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
  9. package/dist/esm/queries/ObservableQueryFor.js +1 -2
  10. package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
  11. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.d.ts +2 -0
  12. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.d.ts.map +1 -0
  13. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.js +72 -0
  14. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.js.map +1 -0
  15. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts +2 -0
  16. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts.map +1 -0
  17. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.js +74 -0
  18. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.js.map +1 -0
  19. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  20. package/package.json +1 -1
  21. package/queries/ObservableQueryFor.ts +9 -4
  22. package/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.ts +93 -0
  23. package/queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.ts +99 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AASxE,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAsBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IArBzE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAwC;IAC5D,OAAO,CAAC,oBAAoB,CAAiB;IAE7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAOM,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO;IAYzE,OAAO;IAKP,eAAe,CAAC,YAAY,EAAE,MAAM;IAKpC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKtD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC;IA2C/G,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAyDlE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
1
+ {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AASxE,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAsBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IArBzE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAwC;IAC5D,OAAO,CAAC,oBAAoB,CAAiB;IAE7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAOM,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO;IAYzE,OAAO;IAKP,eAAe,CAAC,YAAY,EAAE,MAAM;IAKpC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKtD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC;IAgD/G,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAyDlE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
@@ -70,10 +70,9 @@ class ObservableQueryFor {
70
70
  }
71
71
  const parameterValues = ParametersHelper.ParametersHelper.collectParameterValues(this);
72
72
  const { unusedParameters } = UrlHelpers.UrlHelpers.replaceRouteParameters(this.route, args);
73
- const routeAndQueryArguments = args || {};
74
73
  const connectionQueryArguments = {
75
- ...(Globals.Globals.queryDirectMode ? unusedParameters : routeAndQueryArguments),
76
74
  ...parameterValues,
75
+ ...(Globals.Globals.queryDirectMode ? unusedParameters : args || {}),
77
76
  ...this.buildQueryArguments()
78
77
  };
79
78
  const subscriber = new ObservableQuerySubscription.ObservableQuerySubscription(this._connection);
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // For multiplexed mode, include route arguments as plain arguments in the subscribe payload.\n // In direct mode, route arguments are already part of the URL path and should not be duplicated.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const routeAndQueryArguments = (args as object) || {};\n const connectionQueryArguments: any = {\n ...(Globals.queryDirectMode ? unusedParameters : routeAndQueryArguments),\n ...parameterValues,\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["Sorting","Paging","Globals","NullObservableQueryConnection","createObservableQueryConnection","ParametersHelper","UrlHelpers","ObservableQuerySubscription","QueryResult","joinPaths","SortDirection","ValidateRequestArguments","JsonSerializer"],"mappings":"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"}
1
+ {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // Descriptor-backed instance properties provide defaults; fresh args passed to subscribe()\n // must take precedence over any stale instance property values. Spread parameterValues\n // first so that the caller-supplied args can override them.\n //\n // In direct mode the route arguments are already embedded in the URL path, so only\n // the unused (non-route) parameters are appended as additional query arguments.\n // In multiplexed mode ALL arguments — including route-derived ones — must be included\n // in the subscribe payload so the server can execute the query correctly.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const connectionQueryArguments: any = {\n ...parameterValues,\n ...(Globals.queryDirectMode ? unusedParameters : (args as object) || {}),\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["Sorting","Paging","Globals","NullObservableQueryConnection","createObservableQueryConnection","ParametersHelper","UrlHelpers","ObservableQuerySubscription","QueryResult","joinPaths","SortDirection","ValidateRequestArguments","JsonSerializer"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_hub_mode_and_multiple_required_route_parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_multiple_required_route_parameters.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AASxE,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAsBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IArBzE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAwC;IAC5D,OAAO,CAAC,oBAAoB,CAAiB;IAE7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAOM,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO;IAYzE,OAAO;IAKP,eAAe,CAAC,YAAY,EAAE,MAAM;IAKpC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKtD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC;IA2C/G,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAyDlE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
1
+ {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AASxE,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAsBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IArBzE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAwC;IAC5D,OAAO,CAAC,oBAAoB,CAAiB;IAE7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAOM,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO;IAYzE,OAAO;IAKP,eAAe,CAAC,YAAY,EAAE,MAAM;IAKpC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKtD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC;IAgD/G,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAyDlE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
@@ -68,10 +68,9 @@ class ObservableQueryFor {
68
68
  }
69
69
  const parameterValues = ParametersHelper.collectParameterValues(this);
70
70
  const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args);
71
- const routeAndQueryArguments = args || {};
72
71
  const connectionQueryArguments = {
73
- ...(Globals.queryDirectMode ? unusedParameters : routeAndQueryArguments),
74
72
  ...parameterValues,
73
+ ...(Globals.queryDirectMode ? unusedParameters : args || {}),
75
74
  ...this.buildQueryArguments()
76
75
  };
77
76
  const subscriber = new ObservableQuerySubscription(this._connection);
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // For multiplexed mode, include route arguments as plain arguments in the subscribe payload.\n // In direct mode, route arguments are already part of the URL path and should not be duplicated.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const routeAndQueryArguments = (args as object) || {};\n const connectionQueryArguments: any = {\n ...(Globals.queryDirectMode ? unusedParameters : routeAndQueryArguments),\n ...parameterValues,\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // Descriptor-backed instance properties provide defaults; fresh args passed to subscribe()\n // must take precedence over any stale instance property values. Spread parameterValues\n // first so that the caller-supplied args can override them.\n //\n // In direct mode the route arguments are already embedded in the URL path, so only\n // the unused (non-route) parameters are appended as additional query arguments.\n // In multiplexed mode ALL arguments — including route-derived ones — must be included\n // in the subscribe payload so the server can execute the query correctly.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const connectionQueryArguments: any = {\n ...parameterValues,\n ...(Globals.queryDirectMode ? unusedParameters : (args as object) || {}),\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_hub_mode_and_multiple_required_route_parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_multiple_required_route_parameters.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { an_observable_query_for } from '../given/an_observable_query_for';
2
+ import { given } from '../../../given';
3
+ import { Globals } from '../../../Globals';
4
+ import { QueryTransportMethod } from '../../QueryTransportMethod';
5
+ import { HubMessageType } from '../../WebSocketHubConnection';
6
+ import { resetSharedMultiplexer } from '../../ObservableQueryMultiplexer';
7
+ import * as sinon from 'sinon';
8
+ describe('when subscribing with hub mode and multiple required route parameters', given(an_observable_query_for, context => {
9
+ let callback;
10
+ let subscription;
11
+ let fetchStub;
12
+ let originalQueryDirectMode;
13
+ let originalTransportMethod;
14
+ let eventSourceInstance;
15
+ beforeEach(() => {
16
+ originalQueryDirectMode = Globals.queryDirectMode;
17
+ originalTransportMethod = Globals.queryTransportMethod;
18
+ resetSharedMultiplexer();
19
+ Globals.queryDirectMode = false;
20
+ Globals.queryTransportMethod = QueryTransportMethod.ServerSentEvents;
21
+ context.queryWithMultipleRequiredParameters.setOrigin('https://example.com');
22
+ callback = sinon.stub();
23
+ const FakeEventSourceConstructor = function (url) {
24
+ void url;
25
+ eventSourceInstance = this;
26
+ Object.assign(this, {
27
+ onopen: null,
28
+ onerror: null,
29
+ onmessage: null,
30
+ close: sinon.stub(),
31
+ addEventListener: sinon.stub(),
32
+ removeEventListener: sinon.stub(),
33
+ readyState: 0,
34
+ });
35
+ };
36
+ globalThis['EventSource'] = FakeEventSourceConstructor;
37
+ fetchStub = sinon.stub().resolves({ ok: true });
38
+ globalThis['fetch'] = fetchStub;
39
+ subscription = context.queryWithMultipleRequiredParameters.subscribe(callback, {
40
+ userId: 'user-42',
41
+ category: 'books'
42
+ });
43
+ eventSourceInstance.onopen?.();
44
+ eventSourceInstance.onmessage?.({
45
+ data: JSON.stringify({
46
+ type: HubMessageType.Connected,
47
+ payload: 'conn-1'
48
+ })
49
+ });
50
+ });
51
+ afterEach(() => {
52
+ Globals.queryDirectMode = originalQueryDirectMode;
53
+ Globals.queryTransportMethod = originalTransportMethod;
54
+ if (subscription) {
55
+ subscription.unsubscribe();
56
+ }
57
+ delete globalThis['EventSource'];
58
+ delete globalThis['fetch'];
59
+ resetSharedMultiplexer();
60
+ sinon.restore();
61
+ });
62
+ it('should include the first route parameter in the subscribe request', () => {
63
+ fetchStub.called.should.be.true;
64
+ const subscribeBody = JSON.parse(fetchStub.firstCall.args[1].body);
65
+ subscribeBody.request.arguments.userId.should.equal('user-42');
66
+ });
67
+ it('should include the second route parameter in the subscribe request', () => {
68
+ const subscribeBody = JSON.parse(fetchStub.firstCall.args[1].body);
69
+ subscribeBody.request.arguments.category.should.equal('books');
70
+ });
71
+ }));
72
+ //# sourceMappingURL=with_hub_mode_and_multiple_required_route_parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_multiple_required_route_parameters.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_multiple_required_route_parameters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_stale_descriptor_backed_instance_property.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { an_observable_query_for } from '../given/an_observable_query_for';
2
+ import { given } from '../../../given';
3
+ import { Globals } from '../../../Globals';
4
+ import { QueryTransportMethod } from '../../QueryTransportMethod';
5
+ import { HubMessageType } from '../../WebSocketHubConnection';
6
+ import { resetSharedMultiplexer } from '../../ObservableQueryMultiplexer';
7
+ import * as sinon from 'sinon';
8
+ describe('when subscribing with hub mode and stale descriptor-backed instance property', given(an_observable_query_for, context => {
9
+ let callback;
10
+ let subscription;
11
+ let fetchStub;
12
+ let originalQueryDirectMode;
13
+ let originalTransportMethod;
14
+ let eventSourceInstance;
15
+ beforeEach(() => {
16
+ originalQueryDirectMode = Globals.queryDirectMode;
17
+ originalTransportMethod = Globals.queryTransportMethod;
18
+ resetSharedMultiplexer();
19
+ Globals.queryDirectMode = false;
20
+ Globals.queryTransportMethod = QueryTransportMethod.ServerSentEvents;
21
+ context.queryWithParameterDescriptorValues.setOrigin('https://example.com');
22
+ callback = sinon.stub();
23
+ context.queryWithParameterDescriptorValues.filter = 'stale-filter';
24
+ context.queryWithParameterDescriptorValues.limit = 99;
25
+ const FakeEventSourceConstructor = function (url) {
26
+ void url;
27
+ eventSourceInstance = this;
28
+ Object.assign(this, {
29
+ onopen: null,
30
+ onerror: null,
31
+ onmessage: null,
32
+ close: sinon.stub(),
33
+ addEventListener: sinon.stub(),
34
+ removeEventListener: sinon.stub(),
35
+ readyState: 0,
36
+ });
37
+ };
38
+ globalThis['EventSource'] = FakeEventSourceConstructor;
39
+ fetchStub = sinon.stub().resolves({ ok: true });
40
+ globalThis['fetch'] = fetchStub;
41
+ subscription = context.queryWithParameterDescriptorValues.subscribe(callback, {
42
+ filter: 'fresh-filter',
43
+ limit: 42
44
+ });
45
+ eventSourceInstance.onopen?.();
46
+ eventSourceInstance.onmessage?.({
47
+ data: JSON.stringify({
48
+ type: HubMessageType.Connected,
49
+ payload: 'conn-1'
50
+ })
51
+ });
52
+ });
53
+ afterEach(() => {
54
+ Globals.queryDirectMode = originalQueryDirectMode;
55
+ Globals.queryTransportMethod = originalTransportMethod;
56
+ if (subscription) {
57
+ subscription.unsubscribe();
58
+ }
59
+ delete globalThis['EventSource'];
60
+ delete globalThis['fetch'];
61
+ resetSharedMultiplexer();
62
+ sinon.restore();
63
+ });
64
+ it('should use fresh args filter value instead of stale instance property', () => {
65
+ fetchStub.called.should.be.true;
66
+ const subscribeBody = JSON.parse(fetchStub.firstCall.args[1].body);
67
+ subscribeBody.request.arguments.filter.should.equal('fresh-filter');
68
+ });
69
+ it('should use fresh args limit value instead of stale instance property', () => {
70
+ const subscribeBody = JSON.parse(fetchStub.firstCall.args[1].body);
71
+ subscribeBody.request.arguments.limit.should.equal('42');
72
+ });
73
+ }));
74
+ //# sourceMappingURL=with_hub_mode_and_stale_descriptor_backed_instance_property.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_hub_mode_and_stale_descriptor_backed_instance_property.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_hub_mode_and_stale_descriptor_backed_instance_property.ts"],"names":[],"mappings":"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"}