@cratis/arc 20.65.4 → 20.66.1
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.
- package/dist/cjs/queries/ObservableQueryFor.js +3 -7
- package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
- package/dist/cjs/queries/QueryResult.js +5 -17
- package/dist/cjs/queries/QueryResult.js.map +1 -1
- package/dist/cjs/queries/deserializeQueryModel.js +62 -0
- package/dist/cjs/queries/deserializeQueryModel.js.map +1 -0
- package/dist/cjs/queries/index.js +4 -0
- package/dist/cjs/queries/index.js.map +1 -1
- package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
- package/dist/esm/queries/ObservableQueryFor.js +3 -7
- package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
- package/dist/esm/queries/QueryResult.d.ts.map +1 -1
- package/dist/esm/queries/QueryResult.js +5 -17
- package/dist/esm/queries/QueryResult.js.map +1 -1
- package/dist/esm/queries/deserializeQueryModel.d.ts +5 -0
- package/dist/esm/queries/deserializeQueryModel.d.ts.map +1 -0
- package/dist/esm/queries/deserializeQueryModel.js +58 -0
- package/dist/esm/queries/deserializeQueryModel.js.map +1 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_receiving_a_result/and_the_model_type_is_a_primitive_collection.d.ts +2 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_receiving_a_result/and_the_model_type_is_a_primitive_collection.d.ts.map +1 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_receiving_a_result/and_the_model_type_is_a_primitive_collection.js +49 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_receiving_a_result/and_the_model_type_is_a_primitive_collection.js.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_models.d.ts +2 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_models.d.ts.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_models.js +16 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_models.js.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_numbers.d.ts +2 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_numbers.d.ts.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_numbers.js +7 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_numbers.js.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_strings.d.ts +2 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_strings.d.ts.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_strings.js +7 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_strings.js.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_non_array_as_a_collection.d.ts +2 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_non_array_as_a_collection.d.ts.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_non_array_as_a_collection.js +6 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_non_array_as_a_collection.js.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_single_string.d.ts +2 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_single_string.d.ts.map +1 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_single_string.js +7 -0
- package/dist/esm/queries/for_deserializeQueryModel/when_deserializing_a_single_string.js.map +1 -0
- package/dist/esm/queries/index.d.ts +1 -0
- package/dist/esm/queries/index.d.ts.map +1 -1
- package/dist/esm/queries/index.js +1 -0
- package/dist/esm/queries/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/queries/ObservableQueryFor.ts +3 -7
- package/queries/QueryResult.ts +8 -26
- package/queries/deserializeQueryModel.ts +66 -0
- package/queries/for_ObservableQueryFor/when_receiving_a_result/and_the_model_type_is_a_primitive_collection.ts +71 -0
- package/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_models.ts +17 -0
- package/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_numbers.ts +12 -0
- package/queries/for_deserializeQueryModel/when_deserializing_a_collection_of_strings.ts +12 -0
- package/queries/for_deserializeQueryModel/when_deserializing_a_non_array_as_a_collection.ts +11 -0
- package/queries/for_deserializeQueryModel/when_deserializing_a_single_string.ts +12 -0
- package/queries/index.ts +1 -0
|
@@ -4,7 +4,7 @@ var ObservableQuerySubscription = require('./ObservableQuerySubscription.js');
|
|
|
4
4
|
var ValidateRequestArguments = require('./ValidateRequestArguments.js');
|
|
5
5
|
var NullObservableQueryConnection = require('./NullObservableQueryConnection.js');
|
|
6
6
|
var ObservableQueryConnectionFactory = require('./ObservableQueryConnectionFactory.js');
|
|
7
|
-
var
|
|
7
|
+
var deserializeQueryModel = require('./deserializeQueryModel.js');
|
|
8
8
|
var QueryResult = require('./QueryResult.js');
|
|
9
9
|
var Sorting = require('./Sorting.js');
|
|
10
10
|
var Paging = require('./Paging.js');
|
|
@@ -180,13 +180,9 @@ var QueryHttpRequest = require('./QueryHttpRequest.js');
|
|
|
180
180
|
}
|
|
181
181
|
deserializeResult(result) {
|
|
182
182
|
if (this.enumerable) {
|
|
183
|
-
|
|
184
|
-
result.data = fundamentals.JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);
|
|
185
|
-
} else {
|
|
186
|
-
result.data = [];
|
|
187
|
-
}
|
|
183
|
+
result.data = deserializeQueryModel.deserializeQueryModels(this.modelType, result.data);
|
|
188
184
|
} else if (result.data) {
|
|
189
|
-
result.data =
|
|
185
|
+
result.data = deserializeQueryModel.deserializeQueryModel(this.modelType, result.data);
|
|
190
186
|
}
|
|
191
187
|
}
|
|
192
188
|
}
|
|
@@ -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 { QueryValidator } from './QueryValidator';\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 { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\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 private _httpMethod?: QueryHttpMethod;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n readonly validation?: QueryValidator<any>;\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 setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n // Serve the failure through the connection rather than throwing, so a subscriber sees an invalid result\n // on its normal callback path instead of the empty result an unestablished connection would emit.\n this._connection = new NullObservableQueryConnection(\n this.defaultValue,\n QueryResult.validationFailed(clientValidationErrors, this));\n } else 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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return QueryResult.validationFailed(clientValidationErrors, this);\n }\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\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 executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\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 if (result.data) {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","_httpMethod","roles","validation","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","subscribe","args","clientValidationErrors","validate","length","NullObservableQueryConnection","defaultValue","QueryResult","validationFailed","validateArguments","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","Array","isArray","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance"],"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 { QueryValidator } from './QueryValidator';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\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 private _httpMethod?: QueryHttpMethod;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n readonly validation?: QueryValidator<any>;\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 setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n // Serve the failure through the connection rather than throwing, so a subscriber sees an invalid result\n // on its normal callback path instead of the empty result an unestablished connection would emit.\n this._connection = new NullObservableQueryConnection(\n this.defaultValue,\n QueryResult.validationFailed(clientValidationErrors, this));\n } else 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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return QueryResult.validationFailed(clientValidationErrors, this);\n }\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\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 executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\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 result.data = deserializeQueryModels(this.modelType, result.data);\n } else if (result.data) {\n result.data = deserializeQueryModel(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","_httpMethod","roles","validation","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","subscribe","args","clientValidationErrors","validate","length","NullObservableQueryConnection","defaultValue","QueryResult","validationFailed","validateArguments","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","deserializeQueryModels","deserializeQueryModel"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fundamentals = require('@cratis/fundamentals');
|
|
4
3
|
var ValidationResult = require('../validation/ValidationResult.js');
|
|
5
4
|
var PagingInfo = require('./PagingInfo.js');
|
|
5
|
+
var deserializeQueryModel = require('./deserializeQueryModel.js');
|
|
6
6
|
|
|
7
7
|
// Copyright (c) Cratis. All rights reserved.
|
|
8
8
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
@@ -111,27 +111,15 @@ var PagingInfo = require('./PagingInfo.js');
|
|
|
111
111
|
this.paging.totalItems = result.paging.totalItems;
|
|
112
112
|
this.paging.totalPages = result.paging.totalPages;
|
|
113
113
|
if (result.data) {
|
|
114
|
-
|
|
115
|
-
const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;
|
|
116
|
-
if (enumerable) {
|
|
117
|
-
if (Array.isArray(result.data)) {
|
|
118
|
-
data = isPrimitive ? Array.from(result.data) : fundamentals.JsonSerializer.deserializeArrayFromInstance(instanceType, data);
|
|
119
|
-
} else {
|
|
120
|
-
data = [];
|
|
121
|
-
}
|
|
122
|
-
} else {
|
|
123
|
-
data = isPrimitive ? data : fundamentals.JsonSerializer.deserializeFromInstance(instanceType, data);
|
|
124
|
-
}
|
|
125
|
-
this.data = data;
|
|
114
|
+
this.data = enumerable ? deserializeQueryModel.deserializeQueryModels(instanceType, result.data) : deserializeQueryModel.deserializeQueryModel(instanceType, result.data);
|
|
126
115
|
} else {
|
|
127
116
|
this.data = enumerable ? [] : null;
|
|
128
117
|
}
|
|
129
118
|
if (enumerable && result.changeSet) {
|
|
130
|
-
const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;
|
|
131
119
|
this.changeSet = {
|
|
132
|
-
added:
|
|
133
|
-
replaced:
|
|
134
|
-
removed:
|
|
120
|
+
added: deserializeQueryModel.deserializeQueryModels(instanceType, result.changeSet.added ?? []),
|
|
121
|
+
replaced: deserializeQueryModel.deserializeQueryModels(instanceType, result.changeSet.replaced ?? []),
|
|
122
|
+
removed: deserializeQueryModel.deserializeQueryModels(instanceType, result.changeSet.removed ?? [])
|
|
135
123
|
};
|
|
136
124
|
}
|
|
137
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryResult.js","sources":["../../../queries/QueryResult.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 { Constructor, JsonSerializer } from '@cratis/fundamentals';\nimport { ValidationResult } from '../validation/ValidationResult';\nimport { IQueryResult } from './IQueryResult';\nimport { PagingInfo } from './PagingInfo';\nimport { ChangeSet } from './ChangeSet';\n\ntype ServerQueryResult = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n data: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n isSuccess: boolean;\n isAuthorized: boolean;\n isValid: boolean;\n hasExceptions: boolean;\n validationResults: ServerValidationResult[];\n exceptionMessages: string[];\n exceptionStackTrace: string;\n paging: ServerPagingInfo;\n changeSet?: ServerChangeSet;\n}\n\ntype ServerChangeSet = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n added: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n replaced: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n removed: any[];\n}\n\ntype ServerValidationResult = {\n severity: number;\n message: string;\n members: string[];\n state: object;\n}\n\ntype ServerPagingInfo = {\n page: number;\n size: number; \n totalItems: number;\n totalPages: number;\n}\n\n/**\n * Represents the result from executing a {@link IQueryFor}.\n * @template TDataType The data type.\n */\nexport class QueryResult<TDataType = object> implements IQueryResult<TDataType> {\n\n static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType> {\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: true,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n\n }, Object, false);\n }\n\n /**\n * Creates a {@link QueryResult} representing a query rejected by client-side validation, mirroring\n * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.\n * @param {ValidationResult[]} validationResults The validation results that caused the failure.\n * @param {object} query The query being rejected, which describes how to shape its own result.\n * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.\n */\n static validationFailed<TDataType>(\n validationResults: ValidationResult[],\n query: { readonly defaultValue: TDataType; readonly modelType: Constructor; readonly enumerable: boolean }): QueryResult<TDataType> {\n const { defaultValue, modelType, enumerable } = query;\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: validationResults.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, modelType, enumerable) as QueryResult<TDataType>;\n }\n\n static unauthorized<TDataType>(): QueryResult<TDataType> {\n return new QueryResult({\n data: null as unknown as object,\n isSuccess: false,\n isAuthorized: false,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n }\n\n static noSuccess: QueryResult = new QueryResult({\n data: {},\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n\n /**\n * Creates an instance of query result.\n * @param {*} result The raw result from the backend.\n * @param {Constructor} instanceType The type of instance to deserialize.\n * @param {boolean} enumerable Whether or not the result is supposed be an enumerable or not.\n */\n constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean) {\n this.isSuccess = result.isSuccess;\n this.isAuthorized = result.isAuthorized;\n this.isValid = result.isValid;\n this.hasExceptions = result.hasExceptions;\n this.validationResults = result.validationResults.map(_ => new ValidationResult(_.severity, _.message, _.members, _.state));\n this.exceptionMessages = result.exceptionMessages;\n this.exceptionStackTrace = result.exceptionStackTrace;\n this.paging = new PagingInfo();\n this.paging.page = result.paging.page;\n this.paging.size = result.paging.size;\n this.paging.totalItems = result.paging.totalItems;\n this.paging.totalPages = result.paging.totalPages;\n\n if (result.data) {\n let data: object = result.data;\n const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;\n if (enumerable) {\n if (Array.isArray(result.data)) {\n data = isPrimitive\n ? Array.from(result.data)\n : JsonSerializer.deserializeArrayFromInstance(instanceType, data);\n } else {\n data = [];\n }\n } else {\n data = isPrimitive ? data : JsonSerializer.deserializeFromInstance(instanceType, data);\n }\n\n this.data = data as TDataType;\n } else {\n this.data = (enumerable ? [] : null) as TDataType;\n }\n\n if (enumerable && result.changeSet) {\n const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;\n this.changeSet = {\n added: isPrimitive\n ? Array.from(result.changeSet.added ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.added ?? []),\n replaced: isPrimitive\n ? Array.from(result.changeSet.replaced ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.replaced ?? []),\n removed: isPrimitive\n ? Array.from(result.changeSet.removed ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.removed ?? []),\n } as ChangeSet<unknown>;\n }\n }\n\n /** @inheritdoc */\n readonly data: TDataType;\n\n /** @inheritdoc */\n readonly paging: PagingInfo;\n\n /** @inheritdoc */\n readonly isSuccess: boolean;\n\n /** @inheritdoc */\n readonly isAuthorized: boolean;\n\n /** @inheritdoc */\n readonly isValid: boolean;\n\n /** @inheritdoc */\n readonly hasExceptions: boolean;\n\n /** @inheritdoc */\n readonly validationResults: ValidationResult[];\n\n /** @inheritdoc */\n readonly exceptionMessages: string[];\n\n /** @inheritdoc */\n readonly exceptionStackTrace: string;\n\n /**\n * Gets the optional change set describing what changed since the previous update.\n * Set by the server when the delta transfer mode is active.\n * When present, clients can apply the delta to their local state rather than replacing\n * the full dataset.\n */\n readonly changeSet?: ChangeSet<unknown>;\n\n /**\n * Gets whether or not the query has data.\n */\n get hasData(): boolean {\n if (this.data) {\n if (Array.isArray(this.data)) {\n return this.data.length > 0;\n }\n return true;\n }\n return false;\n }\n}\n"],"names":["QueryResult","empty","defaultValue","data","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","exceptionMessages","exceptionStackTrace","paging","totalItems","totalPages","page","size","Object","validationFailed","query","modelType","enumerable","map","_","severity","message","members","state","unauthorized","noSuccess","result","instanceType","ValidationResult","PagingInfo","isPrimitive","String","Number","Boolean","Array","isArray","from","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance","changeSet","added","replaced","removed","hasData","length"],"mappings":";;;;;;AAAA;AACA;AA8CA;;;AAGC,IACM,MAAMA,WAAAA,CAAAA;IAET,OAAOC,KAAAA,CAAiBC,YAAuB,EAA0B;AACrE,QAAA,OAAO,IAAIF,WAAAA,CAAY;YACnBG,IAAAA,EAAMD,YAAAA;YACNE,SAAAA,EAAW,IAAA;YACXC,YAAAA,EAAc,IAAA;YACdC,OAAAA,EAAS,IAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmB,EAAE;AACrBC,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AAEJ,SAAA,EAAGC,MAAAA,EAAQ,KAAA,CAAA;AACf,IAAA;AAEA;;;;;;AAMC,QACD,OAAOC,gBAAAA,CACHT,iBAAqC,EACrCU,KAA0G,EAA0B;AACpI,QAAA,MAAM,EAAEhB,YAAY,EAAEiB,SAAS,EAAEC,UAAU,EAAE,GAAGF,KAAAA;AAChD,QAAA,OAAO,IAAIlB,WAAAA,CAAY;YACnBG,IAAAA,EAAMD,YAAAA;YACNE,SAAAA,EAAW,KAAA;YACXC,YAAAA,EAAc,IAAA;YACdC,OAAAA,EAAS,KAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmBA,iBAAAA,CAAkBa,GAAG,CAACC,CAAAA,KAAM;AAC3CC,oBAAAA,QAAAA,EAAUD,EAAEC,QAAQ;AACpBC,oBAAAA,OAAAA,EAASF,EAAEE,OAAO;AAClBC,oBAAAA,OAAAA,EAASH,EAAEG,OAAO;AAClBC,oBAAAA,KAAAA,EAAOJ,EAAEI;iBACb,CAAA,CAAA;AACAjB,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AACJ,SAAA,EAAGI,SAAAA,EAAWC,UAAAA,CAAAA;AAClB,IAAA;AAEA,IAAA,OAAOO,YAAAA,GAAkD;AACrD,QAAA,OAAO,IAAI3B,WAAAA,CAAY;YACnBG,IAAAA,EAAM,IAAA;YACNC,SAAAA,EAAW,KAAA;YACXC,YAAAA,EAAc,KAAA;YACdC,OAAAA,EAAS,IAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmB,EAAE;AACrBC,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AACJ,SAAA,EAAGC,MAAAA,EAAQ,KAAA,CAAA;AACf,IAAA;IAEA,OAAOY,SAAAA,GAAyB,IAAI5B,WAAAA,CAAY;AAC5CG,QAAAA,IAAAA,EAAM,EAAC;QACPC,SAAAA,EAAW,KAAA;QACXC,YAAAA,EAAc,IAAA;QACdC,OAAAA,EAAS,IAAA;QACTC,aAAAA,EAAe,KAAA;AACfC,QAAAA,iBAAAA,EAAmB,EAAE;AACrBC,QAAAA,iBAAAA,EAAmB,EAAE;QACrBC,mBAAAA,EAAqB,EAAA;QACrBC,MAAAA,EAAQ;YACJC,UAAAA,EAAY,CAAA;YACZC,UAAAA,EAAY,CAAA;YACZC,IAAAA,EAAM,CAAA;YACNC,IAAAA,EAAM;AACV;AACJ,KAAA,EAAGC,QAAQ,KAAA,CAAA;AAEX;;;;;AAKC,QACD,YAAYa,MAAyB,EAAEC,YAAyB,EAAEV,UAAmB,CAAE;AACnF,QAAA,IAAI,CAAChB,SAAS,GAAGyB,MAAAA,CAAOzB,SAAS;AACjC,QAAA,IAAI,CAACC,YAAY,GAAGwB,MAAAA,CAAOxB,YAAY;AACvC,QAAA,IAAI,CAACC,OAAO,GAAGuB,MAAAA,CAAOvB,OAAO;AAC7B,QAAA,IAAI,CAACC,aAAa,GAAGsB,MAAAA,CAAOtB,aAAa;QACzC,IAAI,CAACC,iBAAiB,GAAGqB,MAAAA,CAAOrB,iBAAiB,CAACa,GAAG,CAACC,CAAAA,CAAAA,GAAK,IAAIS,kCAAiBT,CAAAA,CAAEC,QAAQ,EAAED,CAAAA,CAAEE,OAAO,EAAEF,CAAAA,CAAEG,OAAO,EAAEH,CAAAA,CAAEI,KAAK,CAAA,CAAA;AACzH,QAAA,IAAI,CAACjB,iBAAiB,GAAGoB,MAAAA,CAAOpB,iBAAiB;AACjD,QAAA,IAAI,CAACC,mBAAmB,GAAGmB,MAAAA,CAAOnB,mBAAmB;QACrD,IAAI,CAACC,MAAM,GAAG,IAAIqB,qBAAAA,EAAAA;QAClB,IAAI,CAACrB,MAAM,CAACG,IAAI,GAAGe,MAAAA,CAAOlB,MAAM,CAACG,IAAI;QACrC,IAAI,CAACH,MAAM,CAACI,IAAI,GAAGc,MAAAA,CAAOlB,MAAM,CAACI,IAAI;QACrC,IAAI,CAACJ,MAAM,CAACC,UAAU,GAAGiB,MAAAA,CAAOlB,MAAM,CAACC,UAAU;QACjD,IAAI,CAACD,MAAM,CAACE,UAAU,GAAGgB,MAAAA,CAAOlB,MAAM,CAACE,UAAU;QAEjD,IAAIgB,MAAAA,CAAO1B,IAAI,EAAE;YACb,IAAIA,IAAAA,GAAe0B,OAAO1B,IAAI;AAC9B,YAAA,MAAM8B,WAAAA,GAAcH,YAAAA,KAAiBI,MAAAA,IAAUJ,YAAAA,KAAiBK,UAAUL,YAAAA,KAAiBM,OAAAA;AAC3F,YAAA,IAAIhB,UAAAA,EAAY;AACZ,gBAAA,IAAIiB,KAAAA,CAAMC,OAAO,CAACT,MAAAA,CAAO1B,IAAI,CAAA,EAAG;oBAC5BA,IAAAA,GAAO8B,WAAAA,GACDI,KAAAA,CAAME,IAAI,CAACV,MAAAA,CAAO1B,IAAI,CAAA,GACtBqC,2BAAAA,CAAeC,4BAA4B,CAACX,YAAAA,EAAc3B,IAAAA,CAAAA;gBACpE,CAAA,MAAO;AACHA,oBAAAA,IAAAA,GAAO,EAAE;AACb,gBAAA;YACJ,CAAA,MAAO;AACHA,gBAAAA,IAAAA,GAAO8B,WAAAA,GAAc9B,IAAAA,GAAOqC,2BAAAA,CAAeE,uBAAuB,CAACZ,YAAAA,EAAc3B,IAAAA,CAAAA;AACrF,YAAA;YAEA,IAAI,CAACA,IAAI,GAAGA,IAAAA;QAChB,CAAA,MAAO;AACH,YAAA,IAAI,CAACA,IAAI,GAAIiB,UAAAA,GAAa,EAAE,GAAG,IAAA;AACnC,QAAA;QAEA,IAAIA,UAAAA,IAAcS,MAAAA,CAAOc,SAAS,EAAE;AAChC,YAAA,MAAMV,WAAAA,GAAcH,YAAAA,KAAiBI,MAAAA,IAAUJ,YAAAA,KAAiBK,UAAUL,YAAAA,KAAiBM,OAAAA;YAC3F,IAAI,CAACO,SAAS,GAAG;gBACbC,KAAAA,EAAOX,WAAAA,GACDI,MAAME,IAAI,CAACV,OAAOc,SAAS,CAACC,KAAK,IAAI,EAAE,IACvCJ,2BAAAA,CAAeC,4BAA4B,CAACX,YAAAA,EAAcD,MAAAA,CAAOc,SAAS,CAACC,KAAK,IAAI,EAAE,CAAA;gBAC5FC,QAAAA,EAAUZ,WAAAA,GACJI,MAAME,IAAI,CAACV,OAAOc,SAAS,CAACE,QAAQ,IAAI,EAAE,IAC1CL,2BAAAA,CAAeC,4BAA4B,CAACX,YAAAA,EAAcD,MAAAA,CAAOc,SAAS,CAACE,QAAQ,IAAI,EAAE,CAAA;gBAC/FC,OAAAA,EAASb,WAAAA,GACHI,MAAME,IAAI,CAACV,OAAOc,SAAS,CAACG,OAAO,IAAI,EAAE,IACzCN,2BAAAA,CAAeC,4BAA4B,CAACX,YAAAA,EAAcD,MAAAA,CAAOc,SAAS,CAACG,OAAO,IAAI,EAAE;AAClG,aAAA;AACJ,QAAA;AACJ,IAAA;uBAGA,IAAS3C;uBAGT,MAASQ;uBAGT,SAASP;uBAGT,YAASC;uBAGT,OAASC;uBAGT,aAASC;uBAGT,iBAASC;uBAGT,iBAASC;uBAGT,mBAASC;AAET;;;;;AAKC,QACD,SAASiC;AAET;;AAEC,QACD,IAAII,OAAAA,GAAmB;QACnB,IAAI,IAAI,CAAC5C,IAAI,EAAE;AACX,YAAA,IAAIkC,MAAMC,OAAO,CAAC,IAAI,CAACnC,IAAI,CAAA,EAAG;AAC1B,gBAAA,OAAO,IAAI,CAACA,IAAI,CAAC6C,MAAM,GAAG,CAAA;AAC9B,YAAA;YACA,OAAO,IAAA;AACX,QAAA;QACA,OAAO,KAAA;AACX,IAAA;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"QueryResult.js","sources":["../../../queries/QueryResult.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 { Constructor } from '@cratis/fundamentals';\nimport { ValidationResult } from '../validation/ValidationResult';\nimport { IQueryResult } from './IQueryResult';\nimport { PagingInfo } from './PagingInfo';\nimport { ChangeSet } from './ChangeSet';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel';\n\ntype ServerQueryResult = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n data: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n isSuccess: boolean;\n isAuthorized: boolean;\n isValid: boolean;\n hasExceptions: boolean;\n validationResults: ServerValidationResult[];\n exceptionMessages: string[];\n exceptionStackTrace: string;\n paging: ServerPagingInfo;\n changeSet?: ServerChangeSet;\n}\n\ntype ServerChangeSet = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n added: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n replaced: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n removed: any[];\n}\n\ntype ServerValidationResult = {\n severity: number;\n message: string;\n members: string[];\n state: object;\n}\n\ntype ServerPagingInfo = {\n page: number;\n size: number; \n totalItems: number;\n totalPages: number;\n}\n\n/**\n * Represents the result from executing a {@link IQueryFor}.\n * @template TDataType The data type.\n */\nexport class QueryResult<TDataType = object> implements IQueryResult<TDataType> {\n\n static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType> {\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: true,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n\n }, Object, false);\n }\n\n /**\n * Creates a {@link QueryResult} representing a query rejected by client-side validation, mirroring\n * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.\n * @param {ValidationResult[]} validationResults The validation results that caused the failure.\n * @param {object} query The query being rejected, which describes how to shape its own result.\n * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.\n */\n static validationFailed<TDataType>(\n validationResults: ValidationResult[],\n query: { readonly defaultValue: TDataType; readonly modelType: Constructor; readonly enumerable: boolean }): QueryResult<TDataType> {\n const { defaultValue, modelType, enumerable } = query;\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: validationResults.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, modelType, enumerable) as QueryResult<TDataType>;\n }\n\n static unauthorized<TDataType>(): QueryResult<TDataType> {\n return new QueryResult({\n data: null as unknown as object,\n isSuccess: false,\n isAuthorized: false,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n }\n\n static noSuccess: QueryResult = new QueryResult({\n data: {},\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n\n /**\n * Creates an instance of query result.\n * @param {*} result The raw result from the backend.\n * @param {Constructor} instanceType The type of instance to deserialize.\n * @param {boolean} enumerable Whether or not the result is supposed be an enumerable or not.\n */\n constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean) {\n this.isSuccess = result.isSuccess;\n this.isAuthorized = result.isAuthorized;\n this.isValid = result.isValid;\n this.hasExceptions = result.hasExceptions;\n this.validationResults = result.validationResults.map(_ => new ValidationResult(_.severity, _.message, _.members, _.state));\n this.exceptionMessages = result.exceptionMessages;\n this.exceptionStackTrace = result.exceptionStackTrace;\n this.paging = new PagingInfo();\n this.paging.page = result.paging.page;\n this.paging.size = result.paging.size;\n this.paging.totalItems = result.paging.totalItems;\n this.paging.totalPages = result.paging.totalPages;\n\n if (result.data) {\n this.data = (enumerable\n ? deserializeQueryModels(instanceType, result.data)\n : deserializeQueryModel(instanceType, result.data)) as TDataType;\n } else {\n this.data = (enumerable ? [] : null) as TDataType;\n }\n\n if (enumerable && result.changeSet) {\n this.changeSet = {\n added: deserializeQueryModels(instanceType, result.changeSet.added ?? []),\n replaced: deserializeQueryModels(instanceType, result.changeSet.replaced ?? []),\n removed: deserializeQueryModels(instanceType, result.changeSet.removed ?? []),\n } as ChangeSet<unknown>;\n }\n }\n\n /** @inheritdoc */\n readonly data: TDataType;\n\n /** @inheritdoc */\n readonly paging: PagingInfo;\n\n /** @inheritdoc */\n readonly isSuccess: boolean;\n\n /** @inheritdoc */\n readonly isAuthorized: boolean;\n\n /** @inheritdoc */\n readonly isValid: boolean;\n\n /** @inheritdoc */\n readonly hasExceptions: boolean;\n\n /** @inheritdoc */\n readonly validationResults: ValidationResult[];\n\n /** @inheritdoc */\n readonly exceptionMessages: string[];\n\n /** @inheritdoc */\n readonly exceptionStackTrace: string;\n\n /**\n * Gets the optional change set describing what changed since the previous update.\n * Set by the server when the delta transfer mode is active.\n * When present, clients can apply the delta to their local state rather than replacing\n * the full dataset.\n */\n readonly changeSet?: ChangeSet<unknown>;\n\n /**\n * Gets whether or not the query has data.\n */\n get hasData(): boolean {\n if (this.data) {\n if (Array.isArray(this.data)) {\n return this.data.length > 0;\n }\n return true;\n }\n return false;\n }\n}\n"],"names":["QueryResult","empty","defaultValue","data","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","exceptionMessages","exceptionStackTrace","paging","totalItems","totalPages","page","size","Object","validationFailed","query","modelType","enumerable","map","_","severity","message","members","state","unauthorized","noSuccess","result","instanceType","ValidationResult","PagingInfo","deserializeQueryModels","deserializeQueryModel","changeSet","added","replaced","removed","hasData","Array","isArray","length"],"mappings":";;;;;;AAAA;AACA;AA+CA;;;AAGC,IACM,MAAMA,WAAAA,CAAAA;IAET,OAAOC,KAAAA,CAAiBC,YAAuB,EAA0B;AACrE,QAAA,OAAO,IAAIF,WAAAA,CAAY;YACnBG,IAAAA,EAAMD,YAAAA;YACNE,SAAAA,EAAW,IAAA;YACXC,YAAAA,EAAc,IAAA;YACdC,OAAAA,EAAS,IAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmB,EAAE;AACrBC,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AAEJ,SAAA,EAAGC,MAAAA,EAAQ,KAAA,CAAA;AACf,IAAA;AAEA;;;;;;AAMC,QACD,OAAOC,gBAAAA,CACHT,iBAAqC,EACrCU,KAA0G,EAA0B;AACpI,QAAA,MAAM,EAAEhB,YAAY,EAAEiB,SAAS,EAAEC,UAAU,EAAE,GAAGF,KAAAA;AAChD,QAAA,OAAO,IAAIlB,WAAAA,CAAY;YACnBG,IAAAA,EAAMD,YAAAA;YACNE,SAAAA,EAAW,KAAA;YACXC,YAAAA,EAAc,IAAA;YACdC,OAAAA,EAAS,KAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmBA,iBAAAA,CAAkBa,GAAG,CAACC,CAAAA,KAAM;AAC3CC,oBAAAA,QAAAA,EAAUD,EAAEC,QAAQ;AACpBC,oBAAAA,OAAAA,EAASF,EAAEE,OAAO;AAClBC,oBAAAA,OAAAA,EAASH,EAAEG,OAAO;AAClBC,oBAAAA,KAAAA,EAAOJ,EAAEI;iBACb,CAAA,CAAA;AACAjB,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AACJ,SAAA,EAAGI,SAAAA,EAAWC,UAAAA,CAAAA;AAClB,IAAA;AAEA,IAAA,OAAOO,YAAAA,GAAkD;AACrD,QAAA,OAAO,IAAI3B,WAAAA,CAAY;YACnBG,IAAAA,EAAM,IAAA;YACNC,SAAAA,EAAW,KAAA;YACXC,YAAAA,EAAc,KAAA;YACdC,OAAAA,EAAS,IAAA;YACTC,aAAAA,EAAe,KAAA;AACfC,YAAAA,iBAAAA,EAAmB,EAAE;AACrBC,YAAAA,iBAAAA,EAAmB,EAAE;YACrBC,mBAAAA,EAAqB,EAAA;YACrBC,MAAAA,EAAQ;gBACJC,UAAAA,EAAY,CAAA;gBACZC,UAAAA,EAAY,CAAA;gBACZC,IAAAA,EAAM,CAAA;gBACNC,IAAAA,EAAM;AACV;AACJ,SAAA,EAAGC,MAAAA,EAAQ,KAAA,CAAA;AACf,IAAA;IAEA,OAAOY,SAAAA,GAAyB,IAAI5B,WAAAA,CAAY;AAC5CG,QAAAA,IAAAA,EAAM,EAAC;QACPC,SAAAA,EAAW,KAAA;QACXC,YAAAA,EAAc,IAAA;QACdC,OAAAA,EAAS,IAAA;QACTC,aAAAA,EAAe,KAAA;AACfC,QAAAA,iBAAAA,EAAmB,EAAE;AACrBC,QAAAA,iBAAAA,EAAmB,EAAE;QACrBC,mBAAAA,EAAqB,EAAA;QACrBC,MAAAA,EAAQ;YACJC,UAAAA,EAAY,CAAA;YACZC,UAAAA,EAAY,CAAA;YACZC,IAAAA,EAAM,CAAA;YACNC,IAAAA,EAAM;AACV;AACJ,KAAA,EAAGC,QAAQ,KAAA,CAAA;AAEX;;;;;AAKC,QACD,YAAYa,MAAyB,EAAEC,YAAyB,EAAEV,UAAmB,CAAE;AACnF,QAAA,IAAI,CAAChB,SAAS,GAAGyB,MAAAA,CAAOzB,SAAS;AACjC,QAAA,IAAI,CAACC,YAAY,GAAGwB,MAAAA,CAAOxB,YAAY;AACvC,QAAA,IAAI,CAACC,OAAO,GAAGuB,MAAAA,CAAOvB,OAAO;AAC7B,QAAA,IAAI,CAACC,aAAa,GAAGsB,MAAAA,CAAOtB,aAAa;QACzC,IAAI,CAACC,iBAAiB,GAAGqB,MAAAA,CAAOrB,iBAAiB,CAACa,GAAG,CAACC,CAAAA,CAAAA,GAAK,IAAIS,kCAAiBT,CAAAA,CAAEC,QAAQ,EAAED,CAAAA,CAAEE,OAAO,EAAEF,CAAAA,CAAEG,OAAO,EAAEH,CAAAA,CAAEI,KAAK,CAAA,CAAA;AACzH,QAAA,IAAI,CAACjB,iBAAiB,GAAGoB,MAAAA,CAAOpB,iBAAiB;AACjD,QAAA,IAAI,CAACC,mBAAmB,GAAGmB,MAAAA,CAAOnB,mBAAmB;QACrD,IAAI,CAACC,MAAM,GAAG,IAAIqB,qBAAAA,EAAAA;QAClB,IAAI,CAACrB,MAAM,CAACG,IAAI,GAAGe,MAAAA,CAAOlB,MAAM,CAACG,IAAI;QACrC,IAAI,CAACH,MAAM,CAACI,IAAI,GAAGc,MAAAA,CAAOlB,MAAM,CAACI,IAAI;QACrC,IAAI,CAACJ,MAAM,CAACC,UAAU,GAAGiB,MAAAA,CAAOlB,MAAM,CAACC,UAAU;QACjD,IAAI,CAACD,MAAM,CAACE,UAAU,GAAGgB,MAAAA,CAAOlB,MAAM,CAACE,UAAU;QAEjD,IAAIgB,MAAAA,CAAO1B,IAAI,EAAE;AACb,YAAA,IAAI,CAACA,IAAI,GAAIiB,UAAAA,GACPa,4CAAAA,CAAuBH,YAAAA,EAAcD,MAAAA,CAAO1B,IAAI,CAAA,GAChD+B,2CAAAA,CAAsBJ,YAAAA,EAAcD,MAAAA,CAAO1B,IAAI,CAAA;QACzD,CAAA,MAAO;AACH,YAAA,IAAI,CAACA,IAAI,GAAIiB,UAAAA,GAAa,EAAE,GAAG,IAAA;AACnC,QAAA;QAEA,IAAIA,UAAAA,IAAcS,MAAAA,CAAOM,SAAS,EAAE;YAChC,IAAI,CAACA,SAAS,GAAG;AACbC,gBAAAA,KAAAA,EAAOH,6CAAuBH,YAAAA,EAAcD,MAAAA,CAAOM,SAAS,CAACC,KAAK,IAAI,EAAE,CAAA;AACxEC,gBAAAA,QAAAA,EAAUJ,6CAAuBH,YAAAA,EAAcD,MAAAA,CAAOM,SAAS,CAACE,QAAQ,IAAI,EAAE,CAAA;AAC9EC,gBAAAA,OAAAA,EAASL,6CAAuBH,YAAAA,EAAcD,MAAAA,CAAOM,SAAS,CAACG,OAAO,IAAI,EAAE;AAChF,aAAA;AACJ,QAAA;AACJ,IAAA;uBAGA,IAASnC;uBAGT,MAASQ;uBAGT,SAASP;uBAGT,YAASC;uBAGT,OAASC;uBAGT,aAASC;uBAGT,iBAASC;uBAGT,iBAASC;uBAGT,mBAASC;AAET;;;;;AAKC,QACD,SAASyB;AAET;;AAEC,QACD,IAAII,OAAAA,GAAmB;QACnB,IAAI,IAAI,CAACpC,IAAI,EAAE;AACX,YAAA,IAAIqC,MAAMC,OAAO,CAAC,IAAI,CAACtC,IAAI,CAAA,EAAG;AAC1B,gBAAA,OAAO,IAAI,CAACA,IAAI,CAACuC,MAAM,GAAG,CAAA;AAC9B,YAAA;YACA,OAAO,IAAA;AACX,QAAA;QACA,OAAO,KAAA;AACX,IAAA;AACJ;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fundamentals = require('@cratis/fundamentals');
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/*
|
|
8
|
+
* ⚠️ deserializeQueryModel / deserializeQueryModels are for use WITHIN this package only.
|
|
9
|
+
*
|
|
10
|
+
* JsonSerializer's converter registry is module state, and a consumer package can easily resolve a
|
|
11
|
+
* different physical copy of @cratis/fundamentals than this one. Calling these from another package
|
|
12
|
+
* therefore looks up Guid/Date/concept converters in the wrong registry and silently degrades those
|
|
13
|
+
* values to plain deserialization. Other packages should use isPrimitiveModelType - which compares
|
|
14
|
+
* against the JavaScript globals and is safe across copies - and deserialize through their own
|
|
15
|
+
* JsonSerializer.
|
|
16
|
+
*/ /**
|
|
17
|
+
* Determines whether a model type is a JavaScript primitive wrapper rather than a real model.
|
|
18
|
+
*
|
|
19
|
+
* A query whose backend returns a primitive collection - `IEnumerable<string>`, `IEnumerable<int>` -
|
|
20
|
+
* generates a proxy with `String`, `Number` or `Boolean` as its model type.
|
|
21
|
+
* @param {Constructor} modelType The model type the query describes itself with.
|
|
22
|
+
* @returns {boolean} True when the type is a primitive wrapper.
|
|
23
|
+
*/ function isPrimitiveModelType(modelType) {
|
|
24
|
+
return modelType === String || modelType === Number || modelType === Boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Deserializes a single query payload into its model type, passing primitives through untouched.
|
|
28
|
+
*
|
|
29
|
+
* {@link JsonSerializer.deserializeFromInstance} is destructive for primitive wrapper types: it
|
|
30
|
+
* constructs `new String()` and copies declared fields onto it, which for a primitive means the
|
|
31
|
+
* value is discarded and an empty wrapper object is produced. Primitives therefore need to bypass
|
|
32
|
+
* deserialization entirely - they already arrive in their final shape.
|
|
33
|
+
* @param {Constructor} modelType The model type to deserialize into.
|
|
34
|
+
* @param {unknown} data The payload to deserialize.
|
|
35
|
+
* @returns {TDataType} The deserialized instance, or the payload unchanged for primitive types.
|
|
36
|
+
*/ function deserializeQueryModel(modelType, data) {
|
|
37
|
+
if (!modelType || modelType === Object || isPrimitiveModelType(modelType)) {
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
return fundamentals.JsonSerializer.deserializeFromInstance(modelType, data);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Deserializes a query payload collection into its model type, passing primitives through untouched.
|
|
44
|
+
*
|
|
45
|
+
* See {@link deserializeQueryModel} for why primitive model types must bypass deserialization.
|
|
46
|
+
* @param {Constructor} modelType The instance type of the items to deserialize into.
|
|
47
|
+
* @param {unknown} data The payload to deserialize. A non-array payload yields an empty collection.
|
|
48
|
+
* @returns {TDataType[]} The deserialized items, or the items unchanged for primitive types.
|
|
49
|
+
*/ function deserializeQueryModels(modelType, data) {
|
|
50
|
+
if (!Array.isArray(data)) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
if (!modelType || modelType === Object || isPrimitiveModelType(modelType)) {
|
|
54
|
+
return Array.from(data);
|
|
55
|
+
}
|
|
56
|
+
return fundamentals.JsonSerializer.deserializeArrayFromInstance(modelType, data);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
exports.deserializeQueryModel = deserializeQueryModel;
|
|
60
|
+
exports.deserializeQueryModels = deserializeQueryModels;
|
|
61
|
+
exports.isPrimitiveModelType = isPrimitiveModelType;
|
|
62
|
+
//# sourceMappingURL=deserializeQueryModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deserializeQueryModel.js","sources":["../../../queries/deserializeQueryModel.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 { Constructor, JsonSerializer } from '@cratis/fundamentals';\n\n/*\n * ⚠️ deserializeQueryModel / deserializeQueryModels are for use WITHIN this package only.\n *\n * JsonSerializer's converter registry is module state, and a consumer package can easily resolve a\n * different physical copy of @cratis/fundamentals than this one. Calling these from another package\n * therefore looks up Guid/Date/concept converters in the wrong registry and silently degrades those\n * values to plain deserialization. Other packages should use isPrimitiveModelType - which compares\n * against the JavaScript globals and is safe across copies - and deserialize through their own\n * JsonSerializer.\n */\n\n/**\n * Determines whether a model type is a JavaScript primitive wrapper rather than a real model.\n *\n * A query whose backend returns a primitive collection - `IEnumerable<string>`, `IEnumerable<int>` -\n * generates a proxy with `String`, `Number` or `Boolean` as its model type.\n * @param {Constructor} modelType The model type the query describes itself with.\n * @returns {boolean} True when the type is a primitive wrapper.\n */\nexport function isPrimitiveModelType(modelType: Constructor | null | undefined): boolean {\n return modelType === String || modelType === Number || modelType === Boolean;\n}\n\n/**\n * Deserializes a single query payload into its model type, passing primitives through untouched.\n *\n * {@link JsonSerializer.deserializeFromInstance} is destructive for primitive wrapper types: it\n * constructs `new String()` and copies declared fields onto it, which for a primitive means the\n * value is discarded and an empty wrapper object is produced. Primitives therefore need to bypass\n * deserialization entirely - they already arrive in their final shape.\n * @param {Constructor} modelType The model type to deserialize into.\n * @param {unknown} data The payload to deserialize.\n * @returns {TDataType} The deserialized instance, or the payload unchanged for primitive types.\n */\nexport function deserializeQueryModel<TDataType>(modelType: Constructor | null | undefined, data: unknown): TDataType {\n if (!modelType || modelType === Object || isPrimitiveModelType(modelType)) {\n return data as TDataType;\n }\n\n return JsonSerializer.deserializeFromInstance(modelType, data) as TDataType;\n}\n\n/**\n * Deserializes a query payload collection into its model type, passing primitives through untouched.\n *\n * See {@link deserializeQueryModel} for why primitive model types must bypass deserialization.\n * @param {Constructor} modelType The instance type of the items to deserialize into.\n * @param {unknown} data The payload to deserialize. A non-array payload yields an empty collection.\n * @returns {TDataType[]} The deserialized items, or the items unchanged for primitive types.\n */\nexport function deserializeQueryModels<TDataType>(modelType: Constructor | null | undefined, data: unknown): TDataType[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n if (!modelType || modelType === Object || isPrimitiveModelType(modelType)) {\n return Array.from(data) as TDataType[];\n }\n\n return JsonSerializer.deserializeArrayFromInstance(modelType, data) as TDataType[];\n}\n"],"names":["isPrimitiveModelType","modelType","String","Number","Boolean","deserializeQueryModel","data","Object","JsonSerializer","deserializeFromInstance","deserializeQueryModels","Array","isArray","from","deserializeArrayFromInstance"],"mappings":";;;;AAAA;AACA;AAIA;;;;;;;;;;;;;;;;IAmBO,SAASA,oBAAAA,CAAqBC,SAAyC,EAAA;AAC1E,IAAA,OAAOA,SAAAA,KAAcC,MAAAA,IAAUD,SAAAA,KAAcE,MAAAA,IAAUF,SAAAA,KAAcG,OAAAA;AACzE;AAEA;;;;;;;;;;AAUC,IACM,SAASC,qBAAAA,CAAiCJ,SAAyC,EAAEK,IAAa,EAAA;AACrG,IAAA,IAAI,CAACL,SAAAA,IAAaA,SAAAA,KAAcM,MAAAA,IAAUP,qBAAqBC,SAAAA,CAAAA,EAAY;QACvE,OAAOK,IAAAA;AACX,IAAA;IAEA,OAAOE,2BAAAA,CAAeC,uBAAuB,CAACR,SAAAA,EAAWK,IAAAA,CAAAA;AAC7D;AAEA;;;;;;;AAOC,IACM,SAASI,sBAAAA,CAAkCT,SAAyC,EAAEK,IAAa,EAAA;AACtG,IAAA,IAAI,CAACK,KAAAA,CAAMC,OAAO,CAACN,IAAAA,CAAAA,EAAO;AACtB,QAAA,OAAO,EAAE;AACb,IAAA;AAEA,IAAA,IAAI,CAACL,SAAAA,IAAaA,SAAAA,KAAcM,MAAAA,IAAUP,qBAAqBC,SAAAA,CAAAA,EAAY;QACvE,OAAOU,KAAAA,CAAME,IAAI,CAACP,IAAAA,CAAAA;AACtB,IAAA;IAEA,OAAOE,2BAAAA,CAAeM,4BAA4B,CAACb,SAAAA,EAAWK,IAAAA,CAAAA;AAClE;;;;;;"}
|
|
@@ -27,6 +27,7 @@ var WebSocketMessage = require('./WebSocketMessage.js');
|
|
|
27
27
|
var QueryTransportMethod = require('./QueryTransportMethod.js');
|
|
28
28
|
var QueryInstanceCache = require('./QueryInstanceCache.js');
|
|
29
29
|
var reconcileQueryData = require('./reconcileQueryData.js');
|
|
30
|
+
var deserializeQueryModel = require('./deserializeQueryModel.js');
|
|
30
31
|
var IQueryProvider = require('./IQueryProvider.js');
|
|
31
32
|
var QueryProvider = require('./QueryProvider.js');
|
|
32
33
|
var QueryValidator = require('./QueryValidator.js');
|
|
@@ -75,6 +76,9 @@ exports.WebSocketMessageType = WebSocketMessage.WebSocketMessageType;
|
|
|
75
76
|
exports.QueryTransportMethod = QueryTransportMethod.QueryTransportMethod;
|
|
76
77
|
exports.QueryInstanceCache = QueryInstanceCache.QueryInstanceCache;
|
|
77
78
|
exports.reconcileQueryData = reconcileQueryData.reconcileQueryData;
|
|
79
|
+
exports.deserializeQueryModel = deserializeQueryModel.deserializeQueryModel;
|
|
80
|
+
exports.deserializeQueryModels = deserializeQueryModel.deserializeQueryModels;
|
|
81
|
+
exports.isPrimitiveModelType = deserializeQueryModel.isPrimitiveModelType;
|
|
78
82
|
exports.IQueryProvider = IQueryProvider.IQueryProvider;
|
|
79
83
|
exports.QueryProvider = QueryProvider.QueryProvider;
|
|
80
84
|
exports.QueryValidator = QueryValidator.QueryValidator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../queries/index.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\nexport * from './ChangeSet';\nexport * from './IChangeStreamFor';\nexport * from './IQuery';\nexport * from './IQueryFor';\nexport * from './Paging';\nexport * from './Sorting';\nexport * from './SortDirection';\nexport * from './SortingActions';\nexport * from './SortingActionsForQuery';\nexport * from './SortingActionsForObservableQuery';\nexport * from './QueryFor';\nexport * from './QueryHttpMethod';\nexport * from './QueryHttpMethodResolver';\nexport * from './QueryHttpRequest';\nexport * from './QueryResult';\nexport * from './QueryResultWithState';\nexport * from './IObservableQueryFor';\nexport * from './ObservableQueryFor';\nexport * from './IObservableQueryConnection';\nexport * from './IObservableQueryHubConnection';\nexport * from './IReconnectPolicy';\nexport * from './ReconnectPolicy';\nexport * from './HubConnectionKeepAlive';\nexport * from './ObservableQueryConnection';\nexport * from './ObservableQueryConnectionFactory';\nexport * from './ObservableQueryConnectionPool';\nexport * from './ServerSentEventQueryConnection';\nexport * from './ServerSentEventHubConnection';\nexport * from './WebSocketHubConnection';\nexport * from './ObservableQueryMultiplexer';\nexport * from './ObservableQuerySubscription';\nexport * from './WebSocketMessage';\nexport * from './QueryTransportMethod';\nexport * from './QueryInstanceCache';\nexport * from './reconcileQueryData';\nexport * from './IQueryProvider';\nexport * from './QueryProvider';\nexport * from './QueryValidator';\nexport * from './IObservableQueryDiagnostics';\nexport * from './ObservableQueryDiagnostics';\nexport * from './ObservableQueryDiagnosticsSnapshot';\nimport '../validation';"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../queries/index.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\nexport * from './ChangeSet';\nexport * from './IChangeStreamFor';\nexport * from './IQuery';\nexport * from './IQueryFor';\nexport * from './Paging';\nexport * from './Sorting';\nexport * from './SortDirection';\nexport * from './SortingActions';\nexport * from './SortingActionsForQuery';\nexport * from './SortingActionsForObservableQuery';\nexport * from './QueryFor';\nexport * from './QueryHttpMethod';\nexport * from './QueryHttpMethodResolver';\nexport * from './QueryHttpRequest';\nexport * from './QueryResult';\nexport * from './QueryResultWithState';\nexport * from './IObservableQueryFor';\nexport * from './ObservableQueryFor';\nexport * from './IObservableQueryConnection';\nexport * from './IObservableQueryHubConnection';\nexport * from './IReconnectPolicy';\nexport * from './ReconnectPolicy';\nexport * from './HubConnectionKeepAlive';\nexport * from './ObservableQueryConnection';\nexport * from './ObservableQueryConnectionFactory';\nexport * from './ObservableQueryConnectionPool';\nexport * from './ServerSentEventQueryConnection';\nexport * from './ServerSentEventHubConnection';\nexport * from './WebSocketHubConnection';\nexport * from './ObservableQueryMultiplexer';\nexport * from './ObservableQuerySubscription';\nexport * from './WebSocketMessage';\nexport * from './QueryTransportMethod';\nexport * from './QueryInstanceCache';\nexport * from './reconcileQueryData';\nexport * from './deserializeQueryModel';\nexport * from './IQueryProvider';\nexport * from './QueryProvider';\nexport * from './QueryValidator';\nexport * from './IObservableQueryDiagnostics';\nexport * from './ObservableQueryDiagnostics';\nexport * from './ObservableQueryDiagnosticsSnapshot';\nimport '../validation';"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -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;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,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;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAwBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAvBzE,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;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,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;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAE1C,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;IAOf,YAAqB,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAOxE;IAKD,OAAO,SAEN;IAGD,eAAe,CAAC,YAAY,EAAE,MAAM,QAEnC;IAGD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAExC;IAGD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9B;IAGD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAErD;IAGD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE3C;IAGD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAoDpH;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CA4CjE;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;
|
|
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;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,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;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAwBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAvBzE,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;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,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;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAE1C,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;IAOf,YAAqB,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAOxE;IAKD,OAAO,SAEN;IAGD,eAAe,CAAC,YAAY,EAAE,MAAM,QAEnC;IAGD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAExC;IAGD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9B;IAGD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAErD;IAGD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE3C;IAGD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAoDpH;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CA4CjE;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAO5B"}
|
|
@@ -2,7 +2,7 @@ import { ObservableQuerySubscription } from './ObservableQuerySubscription.js';
|
|
|
2
2
|
import { ValidateRequestArguments } from './ValidateRequestArguments.js';
|
|
3
3
|
import { NullObservableQueryConnection } from './NullObservableQueryConnection.js';
|
|
4
4
|
import { createObservableQueryConnection } from './ObservableQueryConnectionFactory.js';
|
|
5
|
-
import {
|
|
5
|
+
import { deserializeQueryModels, deserializeQueryModel } from './deserializeQueryModel.js';
|
|
6
6
|
import { QueryResult } from './QueryResult.js';
|
|
7
7
|
import { Sorting } from './Sorting.js';
|
|
8
8
|
import { Paging } from './Paging.js';
|
|
@@ -178,13 +178,9 @@ import { executeQueryHttpRequest } from './QueryHttpRequest.js';
|
|
|
178
178
|
}
|
|
179
179
|
deserializeResult(result) {
|
|
180
180
|
if (this.enumerable) {
|
|
181
|
-
|
|
182
|
-
result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);
|
|
183
|
-
} else {
|
|
184
|
-
result.data = [];
|
|
185
|
-
}
|
|
181
|
+
result.data = deserializeQueryModels(this.modelType, result.data);
|
|
186
182
|
} else if (result.data) {
|
|
187
|
-
result.data =
|
|
183
|
+
result.data = deserializeQueryModel(this.modelType, result.data);
|
|
188
184
|
}
|
|
189
185
|
}
|
|
190
186
|
}
|
|
@@ -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 { QueryValidator } from './QueryValidator';\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 { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\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 private _httpMethod?: QueryHttpMethod;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n readonly validation?: QueryValidator<any>;\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 setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n // Serve the failure through the connection rather than throwing, so a subscriber sees an invalid result\n // on its normal callback path instead of the empty result an unestablished connection would emit.\n this._connection = new NullObservableQueryConnection(\n this.defaultValue,\n QueryResult.validationFailed(clientValidationErrors, this));\n } else 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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return QueryResult.validationFailed(clientValidationErrors, this);\n }\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\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 executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\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 if (result.data) {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","_httpMethod","roles","validation","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","subscribe","args","clientValidationErrors","validate","length","NullObservableQueryConnection","defaultValue","QueryResult","validationFailed","validateArguments","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","Array","isArray","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance"],"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 { QueryValidator } from './QueryValidator';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\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 private _httpMethod?: QueryHttpMethod;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n readonly validation?: QueryValidator<any>;\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 setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n // Serve the failure through the connection rather than throwing, so a subscriber sees an invalid result\n // on its normal callback path instead of the empty result an unestablished connection would emit.\n this._connection = new NullObservableQueryConnection(\n this.defaultValue,\n QueryResult.validationFailed(clientValidationErrors, this));\n } else 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 const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return QueryResult.validationFailed(clientValidationErrors, this);\n }\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\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 executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\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 result.data = deserializeQueryModels(this.modelType, result.data);\n } else if (result.data) {\n result.data = deserializeQueryModel(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","_httpMethod","roles","validation","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","subscribe","args","clientValidationErrors","validate","length","NullObservableQueryConnection","defaultValue","QueryResult","validationFailed","validateArguments","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","deserializeQueryModels","deserializeQueryModel"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryResult.d.ts","sourceRoot":"","sources":["../../../queries/QueryResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"QueryResult.d.ts","sourceRoot":"","sources":["../../../queries/QueryResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,KAAK,iBAAiB,GAAG;IAErB,IAAI,EAAE,GAAG,CAAC;IAEV,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,sBAAsB,EAAE,CAAC;IAC5C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B,CAAA;AAED,KAAK,eAAe,GAAG;IAEnB,KAAK,EAAE,GAAG,EAAE,CAAC;IAEb,QAAQ,EAAE,GAAG,EAAE,CAAC;IAEhB,OAAO,EAAE,GAAG,EAAE,CAAC;CAClB,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAA;AAMD,qBAAa,WAAW,CAAC,SAAS,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,SAAS,CAAC;IAE3E,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAkBvE;IASD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAC7B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,KAAK,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;KAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAuBtI;IAED,MAAM,CAAC,YAAY,CAAC,SAAS,KAAK,WAAW,CAAC,SAAS,CAAC,CAiBvD;IAED,MAAM,CAAC,SAAS,EAAE,WAAW,CAeX;IAQlB,YAAY,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EA6BpF;IAGD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAGzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAG5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAG/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAG1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAGhC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAG/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAGrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAQrC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAKxC,IAAI,OAAO,IAAI,OAAO,CAQrB;CACJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { JsonSerializer } from '@cratis/fundamentals';
|
|
2
1
|
import { ValidationResult } from '../validation/ValidationResult.js';
|
|
3
2
|
import { PagingInfo } from './PagingInfo.js';
|
|
3
|
+
import { deserializeQueryModels, deserializeQueryModel } from './deserializeQueryModel.js';
|
|
4
4
|
|
|
5
5
|
// Copyright (c) Cratis. All rights reserved.
|
|
6
6
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
@@ -109,27 +109,15 @@ import { PagingInfo } from './PagingInfo.js';
|
|
|
109
109
|
this.paging.totalItems = result.paging.totalItems;
|
|
110
110
|
this.paging.totalPages = result.paging.totalPages;
|
|
111
111
|
if (result.data) {
|
|
112
|
-
|
|
113
|
-
const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;
|
|
114
|
-
if (enumerable) {
|
|
115
|
-
if (Array.isArray(result.data)) {
|
|
116
|
-
data = isPrimitive ? Array.from(result.data) : JsonSerializer.deserializeArrayFromInstance(instanceType, data);
|
|
117
|
-
} else {
|
|
118
|
-
data = [];
|
|
119
|
-
}
|
|
120
|
-
} else {
|
|
121
|
-
data = isPrimitive ? data : JsonSerializer.deserializeFromInstance(instanceType, data);
|
|
122
|
-
}
|
|
123
|
-
this.data = data;
|
|
112
|
+
this.data = enumerable ? deserializeQueryModels(instanceType, result.data) : deserializeQueryModel(instanceType, result.data);
|
|
124
113
|
} else {
|
|
125
114
|
this.data = enumerable ? [] : null;
|
|
126
115
|
}
|
|
127
116
|
if (enumerable && result.changeSet) {
|
|
128
|
-
const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;
|
|
129
117
|
this.changeSet = {
|
|
130
|
-
added:
|
|
131
|
-
replaced:
|
|
132
|
-
removed:
|
|
118
|
+
added: deserializeQueryModels(instanceType, result.changeSet.added ?? []),
|
|
119
|
+
replaced: deserializeQueryModels(instanceType, result.changeSet.replaced ?? []),
|
|
120
|
+
removed: deserializeQueryModels(instanceType, result.changeSet.removed ?? [])
|
|
133
121
|
};
|
|
134
122
|
}
|
|
135
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryResult.js","sources":["../../../queries/QueryResult.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 { Constructor, JsonSerializer } from '@cratis/fundamentals';\nimport { ValidationResult } from '../validation/ValidationResult';\nimport { IQueryResult } from './IQueryResult';\nimport { PagingInfo } from './PagingInfo';\nimport { ChangeSet } from './ChangeSet';\n\ntype ServerQueryResult = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n data: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n isSuccess: boolean;\n isAuthorized: boolean;\n isValid: boolean;\n hasExceptions: boolean;\n validationResults: ServerValidationResult[];\n exceptionMessages: string[];\n exceptionStackTrace: string;\n paging: ServerPagingInfo;\n changeSet?: ServerChangeSet;\n}\n\ntype ServerChangeSet = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n added: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n replaced: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n removed: any[];\n}\n\ntype ServerValidationResult = {\n severity: number;\n message: string;\n members: string[];\n state: object;\n}\n\ntype ServerPagingInfo = {\n page: number;\n size: number; \n totalItems: number;\n totalPages: number;\n}\n\n/**\n * Represents the result from executing a {@link IQueryFor}.\n * @template TDataType The data type.\n */\nexport class QueryResult<TDataType = object> implements IQueryResult<TDataType> {\n\n static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType> {\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: true,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n\n }, Object, false);\n }\n\n /**\n * Creates a {@link QueryResult} representing a query rejected by client-side validation, mirroring\n * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.\n * @param {ValidationResult[]} validationResults The validation results that caused the failure.\n * @param {object} query The query being rejected, which describes how to shape its own result.\n * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.\n */\n static validationFailed<TDataType>(\n validationResults: ValidationResult[],\n query: { readonly defaultValue: TDataType; readonly modelType: Constructor; readonly enumerable: boolean }): QueryResult<TDataType> {\n const { defaultValue, modelType, enumerable } = query;\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: validationResults.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, modelType, enumerable) as QueryResult<TDataType>;\n }\n\n static unauthorized<TDataType>(): QueryResult<TDataType> {\n return new QueryResult({\n data: null as unknown as object,\n isSuccess: false,\n isAuthorized: false,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n }\n\n static noSuccess: QueryResult = new QueryResult({\n data: {},\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n\n /**\n * Creates an instance of query result.\n * @param {*} result The raw result from the backend.\n * @param {Constructor} instanceType The type of instance to deserialize.\n * @param {boolean} enumerable Whether or not the result is supposed be an enumerable or not.\n */\n constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean) {\n this.isSuccess = result.isSuccess;\n this.isAuthorized = result.isAuthorized;\n this.isValid = result.isValid;\n this.hasExceptions = result.hasExceptions;\n this.validationResults = result.validationResults.map(_ => new ValidationResult(_.severity, _.message, _.members, _.state));\n this.exceptionMessages = result.exceptionMessages;\n this.exceptionStackTrace = result.exceptionStackTrace;\n this.paging = new PagingInfo();\n this.paging.page = result.paging.page;\n this.paging.size = result.paging.size;\n this.paging.totalItems = result.paging.totalItems;\n this.paging.totalPages = result.paging.totalPages;\n\n if (result.data) {\n let data: object = result.data;\n const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;\n if (enumerable) {\n if (Array.isArray(result.data)) {\n data = isPrimitive\n ? Array.from(result.data)\n : JsonSerializer.deserializeArrayFromInstance(instanceType, data);\n } else {\n data = [];\n }\n } else {\n data = isPrimitive ? data : JsonSerializer.deserializeFromInstance(instanceType, data);\n }\n\n this.data = data as TDataType;\n } else {\n this.data = (enumerable ? [] : null) as TDataType;\n }\n\n if (enumerable && result.changeSet) {\n const isPrimitive = instanceType === String || instanceType === Number || instanceType === Boolean;\n this.changeSet = {\n added: isPrimitive\n ? Array.from(result.changeSet.added ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.added ?? []),\n replaced: isPrimitive\n ? Array.from(result.changeSet.replaced ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.replaced ?? []),\n removed: isPrimitive\n ? Array.from(result.changeSet.removed ?? [])\n : JsonSerializer.deserializeArrayFromInstance(instanceType, result.changeSet.removed ?? []),\n } as ChangeSet<unknown>;\n }\n }\n\n /** @inheritdoc */\n readonly data: TDataType;\n\n /** @inheritdoc */\n readonly paging: PagingInfo;\n\n /** @inheritdoc */\n readonly isSuccess: boolean;\n\n /** @inheritdoc */\n readonly isAuthorized: boolean;\n\n /** @inheritdoc */\n readonly isValid: boolean;\n\n /** @inheritdoc */\n readonly hasExceptions: boolean;\n\n /** @inheritdoc */\n readonly validationResults: ValidationResult[];\n\n /** @inheritdoc */\n readonly exceptionMessages: string[];\n\n /** @inheritdoc */\n readonly exceptionStackTrace: string;\n\n /**\n * Gets the optional change set describing what changed since the previous update.\n * Set by the server when the delta transfer mode is active.\n * When present, clients can apply the delta to their local state rather than replacing\n * the full dataset.\n */\n readonly changeSet?: ChangeSet<unknown>;\n\n /**\n * Gets whether or not the query has data.\n */\n get hasData(): boolean {\n if (this.data) {\n if (Array.isArray(this.data)) {\n return this.data.length > 0;\n }\n return true;\n }\n return false;\n }\n}\n"],"names":["QueryResult","empty","defaultValue","data","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","exceptionMessages","exceptionStackTrace","paging","totalItems","totalPages","page","size","Object","validationFailed","query","modelType","enumerable","map","_","severity","message","members","state","unauthorized","noSuccess","result","instanceType","ValidationResult","PagingInfo","isPrimitive","String","Number","Boolean","Array","isArray","from","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance","changeSet","added","replaced","removed","hasData","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryResult.js","sources":["../../../queries/QueryResult.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 { Constructor } from '@cratis/fundamentals';\nimport { ValidationResult } from '../validation/ValidationResult';\nimport { IQueryResult } from './IQueryResult';\nimport { PagingInfo } from './PagingInfo';\nimport { ChangeSet } from './ChangeSet';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel';\n\ntype ServerQueryResult = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n data: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n isSuccess: boolean;\n isAuthorized: boolean;\n isValid: boolean;\n hasExceptions: boolean;\n validationResults: ServerValidationResult[];\n exceptionMessages: string[];\n exceptionStackTrace: string;\n paging: ServerPagingInfo;\n changeSet?: ServerChangeSet;\n}\n\ntype ServerChangeSet = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n added: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n replaced: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n removed: any[];\n}\n\ntype ServerValidationResult = {\n severity: number;\n message: string;\n members: string[];\n state: object;\n}\n\ntype ServerPagingInfo = {\n page: number;\n size: number; \n totalItems: number;\n totalPages: number;\n}\n\n/**\n * Represents the result from executing a {@link IQueryFor}.\n * @template TDataType The data type.\n */\nexport class QueryResult<TDataType = object> implements IQueryResult<TDataType> {\n\n static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType> {\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: true,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n\n }, Object, false);\n }\n\n /**\n * Creates a {@link QueryResult} representing a query rejected by client-side validation, mirroring\n * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.\n * @param {ValidationResult[]} validationResults The validation results that caused the failure.\n * @param {object} query The query being rejected, which describes how to shape its own result.\n * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.\n */\n static validationFailed<TDataType>(\n validationResults: ValidationResult[],\n query: { readonly defaultValue: TDataType; readonly modelType: Constructor; readonly enumerable: boolean }): QueryResult<TDataType> {\n const { defaultValue, modelType, enumerable } = query;\n return new QueryResult({\n data: defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: validationResults.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, modelType, enumerable) as QueryResult<TDataType>;\n }\n\n static unauthorized<TDataType>(): QueryResult<TDataType> {\n return new QueryResult({\n data: null as unknown as object,\n isSuccess: false,\n isAuthorized: false,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n }\n\n static noSuccess: QueryResult = new QueryResult({\n data: {},\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: false,\n validationResults: [],\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, Object, false);\n\n /**\n * Creates an instance of query result.\n * @param {*} result The raw result from the backend.\n * @param {Constructor} instanceType The type of instance to deserialize.\n * @param {boolean} enumerable Whether or not the result is supposed be an enumerable or not.\n */\n constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean) {\n this.isSuccess = result.isSuccess;\n this.isAuthorized = result.isAuthorized;\n this.isValid = result.isValid;\n this.hasExceptions = result.hasExceptions;\n this.validationResults = result.validationResults.map(_ => new ValidationResult(_.severity, _.message, _.members, _.state));\n this.exceptionMessages = result.exceptionMessages;\n this.exceptionStackTrace = result.exceptionStackTrace;\n this.paging = new PagingInfo();\n this.paging.page = result.paging.page;\n this.paging.size = result.paging.size;\n this.paging.totalItems = result.paging.totalItems;\n this.paging.totalPages = result.paging.totalPages;\n\n if (result.data) {\n this.data = (enumerable\n ? deserializeQueryModels(instanceType, result.data)\n : deserializeQueryModel(instanceType, result.data)) as TDataType;\n } else {\n this.data = (enumerable ? [] : null) as TDataType;\n }\n\n if (enumerable && result.changeSet) {\n this.changeSet = {\n added: deserializeQueryModels(instanceType, result.changeSet.added ?? []),\n replaced: deserializeQueryModels(instanceType, result.changeSet.replaced ?? []),\n removed: deserializeQueryModels(instanceType, result.changeSet.removed ?? []),\n } as ChangeSet<unknown>;\n }\n }\n\n /** @inheritdoc */\n readonly data: TDataType;\n\n /** @inheritdoc */\n readonly paging: PagingInfo;\n\n /** @inheritdoc */\n readonly isSuccess: boolean;\n\n /** @inheritdoc */\n readonly isAuthorized: boolean;\n\n /** @inheritdoc */\n readonly isValid: boolean;\n\n /** @inheritdoc */\n readonly hasExceptions: boolean;\n\n /** @inheritdoc */\n readonly validationResults: ValidationResult[];\n\n /** @inheritdoc */\n readonly exceptionMessages: string[];\n\n /** @inheritdoc */\n readonly exceptionStackTrace: string;\n\n /**\n * Gets the optional change set describing what changed since the previous update.\n * Set by the server when the delta transfer mode is active.\n * When present, clients can apply the delta to their local state rather than replacing\n * the full dataset.\n */\n readonly changeSet?: ChangeSet<unknown>;\n\n /**\n * Gets whether or not the query has data.\n */\n get hasData(): boolean {\n if (this.data) {\n if (Array.isArray(this.data)) {\n return this.data.length > 0;\n }\n return true;\n }\n return false;\n }\n}\n"],"names":["QueryResult","empty","defaultValue","data","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","exceptionMessages","exceptionStackTrace","paging","totalItems","totalPages","page","size","Object","validationFailed","query","modelType","enumerable","map","_","severity","message","members","state","unauthorized","noSuccess","result","instanceType","ValidationResult","PagingInfo","deserializeQueryModels","deserializeQueryModel","changeSet","added","replaced","removed","hasData","Array","isArray","length"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Constructor } from '@cratis/fundamentals';
|
|
2
|
+
export declare function isPrimitiveModelType(modelType: Constructor | null | undefined): boolean;
|
|
3
|
+
export declare function deserializeQueryModel<TDataType>(modelType: Constructor | null | undefined, data: unknown): TDataType;
|
|
4
|
+
export declare function deserializeQueryModels<TDataType>(modelType: Constructor | null | undefined, data: unknown): TDataType[];
|
|
5
|
+
//# sourceMappingURL=deserializeQueryModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deserializeQueryModel.d.ts","sourceRoot":"","sources":["../../../queries/deserializeQueryModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAqBnE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEvF;AAaD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAMpH;AAUD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,CAUvH"}
|