@cratis/arc 20.60.0 → 20.60.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.
Files changed (49) hide show
  1. package/dist/cjs/queries/NullObservableQueryConnection.js +7 -2
  2. package/dist/cjs/queries/NullObservableQueryConnection.js.map +1 -1
  3. package/dist/cjs/queries/ObservableQueryFor.js +11 -1
  4. package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
  5. package/dist/cjs/queries/QueryFor.js +1 -21
  6. package/dist/cjs/queries/QueryFor.js.map +1 -1
  7. package/dist/cjs/queries/QueryResult.js +30 -0
  8. package/dist/cjs/queries/QueryResult.js.map +1 -1
  9. package/dist/esm/queries/NullObservableQueryConnection.d.ts +3 -1
  10. package/dist/esm/queries/NullObservableQueryConnection.d.ts.map +1 -1
  11. package/dist/esm/queries/NullObservableQueryConnection.js +7 -2
  12. package/dist/esm/queries/NullObservableQueryConnection.js.map +1 -1
  13. package/dist/esm/queries/ObservableQueryFor.d.ts +2 -0
  14. package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
  15. package/dist/esm/queries/ObservableQueryFor.js +11 -1
  16. package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
  17. package/dist/esm/queries/QueryFor.d.ts.map +1 -1
  18. package/dist/esm/queries/QueryFor.js +1 -21
  19. package/dist/esm/queries/QueryFor.js.map +1 -1
  20. package/dist/esm/queries/QueryResult.d.ts +5 -0
  21. package/dist/esm/queries/QueryResult.d.ts.map +1 -1
  22. package/dist/esm/queries/QueryResult.js +30 -0
  23. package/dist/esm/queries/QueryResult.js.map +1 -1
  24. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_with_validator.d.ts +23 -0
  25. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_with_validator.d.ts.map +1 -0
  26. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_with_validator.js +28 -0
  27. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_with_validator.js.map +1 -0
  28. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.d.ts +2 -0
  29. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.d.ts.map +1 -0
  30. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.js +21 -0
  31. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.js.map +1 -0
  32. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.d.ts +2 -0
  33. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.d.ts.map +1 -0
  34. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.js +18 -0
  35. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.js.map +1 -0
  36. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.d.ts +2 -0
  37. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.d.ts.map +1 -0
  38. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.js +21 -0
  39. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.js.map +1 -0
  40. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +1 -1
  42. package/queries/NullObservableQueryConnection.ts +5 -2
  43. package/queries/ObservableQueryFor.ts +15 -1
  44. package/queries/QueryFor.ts +1 -21
  45. package/queries/QueryResult.ts +34 -0
  46. package/queries/for_ObservableQueryFor/given/an_observable_query_with_validator.ts +41 -0
  47. package/queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.ts +30 -0
  48. package/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.ts +26 -0
  49. package/queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.ts +32 -0
@@ -1 +1 @@
1
- {"version":3,"file":"QueryFor.js","sources":["../../../queries/QueryFor.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 { IQueryFor } from './IQueryFor';\nimport { QueryResult } from \"./QueryResult\";\nimport { QueryValidator } from './QueryValidator';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging';\nimport { Globals } from '../Globals';\nimport { Sorting } from './Sorting';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class QueryFor<TDataType, TParameters = object> implements IQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _httpHeadersCallback: GetHttpHeaders;\n private _httpMethod?: QueryHttpMethod;\n abstract readonly route: string;\n /** Backend fully-qualified query name used as cache key. Overridden in generated proxies. */\n readonly queryName?: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n readonly validation?: QueryValidator<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n readonly roles: string[] = [];\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n abstract defaultValue: TDataType;\n abortController?: AbortController;\n sorting: Sorting;\n paging: Paging;\n parameters: TParameters | undefined;\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 /** @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 async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n args = args || this.parameters;\n\n const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return new QueryResult({\n data: this.defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: clientValidationErrors.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 }, this.modelType, this.enumerable) as QueryResult<TDataType>;\n }\n\n if (!ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, args as object)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const headers = {\n ... this._httpHeadersCallback?.(), ...\n {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\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 signal: this.abortController.signal\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"],"names":["QueryFor","_microservice","_apiBasePath","_origin","_httpHeadersCallback","_httpMethod","queryName","validation","roles","abortController","sorting","paging","parameters","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","perform","args","noSuccess","QueryResult","data","defaultValue","clientValidationErrors","validate","length","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","map","_","severity","message","members","state","exceptionMessages","exceptionStackTrace","totalItems","totalPages","page","size","ValidateRequestArguments","name","requiredRequestParameters","Promise","resolve","abort","AbortController","parameterValues","ParametersHelper","collectParameterValues","headers","microserviceHttpHeader","response","executeQueryHttpRequest","route","signal","result","json"],"mappings":"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"}
1
+ {"version":3,"file":"QueryFor.js","sources":["../../../queries/QueryFor.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 { IQueryFor } from './IQueryFor';\nimport { QueryResult } from \"./QueryResult\";\nimport { QueryValidator } from './QueryValidator';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging';\nimport { Globals } from '../Globals';\nimport { Sorting } from './Sorting';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class QueryFor<TDataType, TParameters = object> implements IQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _httpHeadersCallback: GetHttpHeaders;\n private _httpMethod?: QueryHttpMethod;\n abstract readonly route: string;\n /** Backend fully-qualified query name used as cache key. Overridden in generated proxies. */\n readonly queryName?: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n readonly validation?: QueryValidator<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n readonly roles: string[] = [];\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n abstract defaultValue: TDataType;\n abortController?: AbortController;\n sorting: Sorting;\n paging: Paging;\n parameters: TParameters | undefined;\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 /** @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 async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n args = args || this.parameters;\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 (!ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, args as object)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const headers = {\n ... this._httpHeadersCallback?.(), ...\n {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\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 signal: this.abortController.signal\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"],"names":["QueryFor","_microservice","_apiBasePath","_origin","_httpHeadersCallback","_httpMethod","queryName","validation","roles","abortController","sorting","paging","parameters","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","perform","args","noSuccess","QueryResult","data","defaultValue","clientValidationErrors","validate","length","validationFailed","ValidateRequestArguments","name","requiredRequestParameters","Promise","resolve","abort","AbortController","parameterValues","ParametersHelper","collectParameterValues","headers","microserviceHttpHeader","response","executeQueryHttpRequest","route","signal","result","json"],"mappings":"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"}
@@ -34,6 +34,11 @@ type ServerPagingInfo = {
34
34
  };
35
35
  export declare class QueryResult<TDataType = object> implements IQueryResult<TDataType> {
36
36
  static empty<TDataType>(defaultValue: TDataType): QueryResult<TDataType>;
37
+ static validationFailed<TDataType>(validationResults: ValidationResult[], query: {
38
+ readonly defaultValue: TDataType;
39
+ readonly modelType: Constructor;
40
+ readonly enumerable: boolean;
41
+ }): QueryResult<TDataType>;
37
42
  static unauthorized<TDataType>(): QueryResult<TDataType>;
38
43
  static noSuccess: QueryResult;
39
44
  constructor(result: ServerQueryResult, instanceType: Constructor, enumerable: boolean);
@@ -1 +1 @@
1
- {"version":3,"file":"QueryResult.d.ts","sourceRoot":"","sources":["../../../queries/QueryResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACnE,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;AAExC,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;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,EAgDpF;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
+ {"version":3,"file":"QueryResult.d.ts","sourceRoot":"","sources":["../../../queries/QueryResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACnE,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;AAExC,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,EAgDpF;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"}
@@ -26,6 +26,36 @@ import { PagingInfo } from './PagingInfo.js';
26
26
  }
27
27
  }, Object, false);
28
28
  }
29
+ /**
30
+ * Creates a {@link QueryResult} representing a query rejected by client-side validation, mirroring
31
+ * {@link CommandResult.validationFailed} so a caller reads a failed query the same way it reads a failed command.
32
+ * @param {ValidationResult[]} validationResults The validation results that caused the failure.
33
+ * @param {object} query The query being rejected, which describes how to shape its own result.
34
+ * @returns {QueryResult<TDataType>} A result that is neither successful nor valid.
35
+ */ static validationFailed(validationResults, query) {
36
+ const { defaultValue, modelType, enumerable } = query;
37
+ return new QueryResult({
38
+ data: defaultValue,
39
+ isSuccess: false,
40
+ isAuthorized: true,
41
+ isValid: false,
42
+ hasExceptions: false,
43
+ validationResults: validationResults.map((_)=>({
44
+ severity: _.severity,
45
+ message: _.message,
46
+ members: _.members,
47
+ state: _.state
48
+ })),
49
+ exceptionMessages: [],
50
+ exceptionStackTrace: '',
51
+ paging: {
52
+ totalItems: 0,
53
+ totalPages: 0,
54
+ page: 0,
55
+ size: 0
56
+ }
57
+ }, modelType, enumerable);
58
+ }
29
59
  static unauthorized() {
30
60
  return new QueryResult({
31
61
  data: null,
@@ -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 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","unauthorized","noSuccess","result","instanceType","enumerable","map","_","ValidationResult","severity","message","members","state","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, 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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"}
@@ -0,0 +1,23 @@
1
+ import { ObservableQueryFor } from '../../ObservableQueryFor';
2
+ import { QueryValidator } from '../../QueryValidator';
3
+ import { ParameterDescriptor } from '../../../reflection/ParameterDescriptor';
4
+ import '../../../validation/RuleBuilderExtensions';
5
+ export interface ITestParams {
6
+ minAge: number;
7
+ }
8
+ export declare class TestObservableQueryValidator extends QueryValidator<ITestParams> {
9
+ constructor();
10
+ }
11
+ export declare class TestObservableQuery extends ObservableQueryFor<string, ITestParams> {
12
+ readonly route = "/test";
13
+ readonly validation: TestObservableQueryValidator;
14
+ readonly parameterDescriptors: ParameterDescriptor[];
15
+ readonly defaultValue = "";
16
+ constructor();
17
+ get requiredRequestParameters(): string[];
18
+ }
19
+ export declare class an_observable_query_with_validator {
20
+ query: TestObservableQuery;
21
+ constructor();
22
+ }
23
+ //# sourceMappingURL=an_observable_query_with_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"an_observable_query_with_validator.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/given/an_observable_query_with_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,2CAA2C,CAAC;AAEnD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,WAAW,CAAC;IACzE,cAGC;CACJ;AAED,qBAAa,mBAAoB,SAAQ,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;IAC5E,QAAQ,CAAC,KAAK,WAAW;IACzB,QAAQ,CAAC,UAAU,+BAAsC;IACzD,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;IAC1D,QAAQ,CAAC,YAAY,MAAM;IAE3B,cAEC;IAED,IAAI,yBAAyB,IAAI,MAAM,EAAE,CAExC;CACJ;AAED,qBAAa,kCAAkC;IAC3C,KAAK,EAAE,mBAAmB,CAAC;IAE3B,cAEC;CACJ"}
@@ -0,0 +1,28 @@
1
+ import { ObservableQueryFor } from '../../ObservableQueryFor';
2
+ import { QueryValidator } from '../../QueryValidator';
3
+ import '../../../validation/RuleBuilderExtensions';
4
+ export class TestObservableQueryValidator extends QueryValidator {
5
+ constructor() {
6
+ super();
7
+ this.ruleFor((c) => c.minAge).greaterThanOrEqual(0).withMessage('Age must be positive');
8
+ }
9
+ }
10
+ export class TestObservableQuery extends ObservableQueryFor {
11
+ route = '/test';
12
+ validation = new TestObservableQueryValidator();
13
+ parameterDescriptors = [];
14
+ defaultValue = '';
15
+ constructor() {
16
+ super(String, false);
17
+ }
18
+ get requiredRequestParameters() {
19
+ return [];
20
+ }
21
+ }
22
+ export class an_observable_query_with_validator {
23
+ query;
24
+ constructor() {
25
+ this.query = new TestObservableQuery();
26
+ }
27
+ }
28
+ //# sourceMappingURL=an_observable_query_with_validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"an_observable_query_with_validator.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/given/an_observable_query_with_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,2CAA2C,CAAC;AAMnD,MAAM,OAAO,4BAA6B,SAAQ,cAA2B;IACzE;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACzG,CAAC;CACJ;AAED,MAAM,OAAO,mBAAoB,SAAQ,kBAAuC;IACnE,KAAK,GAAG,OAAO,CAAC;IAChB,UAAU,GAAG,IAAI,4BAA4B,EAAE,CAAC;IAChD,oBAAoB,GAA0B,EAAE,CAAC;IACjD,YAAY,GAAG,EAAE,CAAC;IAE3B;QACI,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,yBAAyB;QACzB,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,MAAM,OAAO,kCAAkC;IAC3C,KAAK,CAAsB;IAE3B;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAC3C,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_client_validation_failing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_failing.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { an_observable_query_with_validator } from '../given/an_observable_query_with_validator';
2
+ import { given } from '../../../given';
3
+ describe('when performing with client validation failing', given(an_observable_query_with_validator, context => {
4
+ let result;
5
+ beforeEach(async () => {
6
+ result = await context.query.perform({ minAge: -5 });
7
+ });
8
+ it('should not be success', () => {
9
+ result.isSuccess.should.be.false;
10
+ });
11
+ it('should not be valid', () => {
12
+ result.isValid.should.be.false;
13
+ });
14
+ it('should have validation results', () => {
15
+ result.validationResults.should.not.be.empty;
16
+ });
17
+ it('should have error for minAge', () => {
18
+ result.validationResults.some(_ => _.members.includes('minAge')).should.be.true;
19
+ });
20
+ }));
21
+ //# sourceMappingURL=with_client_validation_failing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_failing.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_performing/with_client_validation_failing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAEjG,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,QAAQ,CAAC,gDAAgD,EAAE,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,EAAE;IAC3G,IAAI,MAA2B,CAAC;IAEhC,UAAU,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IACpF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_client_validation_failing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_failing.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { an_observable_query_with_validator } from '../given/an_observable_query_with_validator';
2
+ import { given } from '../../../given';
3
+ describe('when subscribing with client validation failing', given(an_observable_query_with_validator, context => {
4
+ let result;
5
+ beforeEach(() => {
6
+ context.query.subscribe(_ => result = _, { minAge: -5 });
7
+ });
8
+ it('should push a result to the subscriber', () => {
9
+ result.should.not.be.undefined;
10
+ });
11
+ it('should not be valid', () => {
12
+ result.isValid.should.be.false;
13
+ });
14
+ it('should have error for minAge', () => {
15
+ result.validationResults.some(_ => _.members.includes('minAge')).should.be.true;
16
+ });
17
+ }));
18
+ //# sourceMappingURL=with_client_validation_failing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_failing.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_client_validation_failing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAEjG,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,QAAQ,CAAC,iDAAiD,EAAE,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,EAAE;IAC5G,IAAI,MAA2B,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IACpF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_client_validation_passing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_passing.d.ts","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { an_observable_query_with_validator } from '../given/an_observable_query_with_validator';
2
+ import { given } from '../../../given';
3
+ import * as sinon from 'sinon';
4
+ describe('when subscribing with client validation passing', given(an_observable_query_with_validator, context => {
5
+ let callback;
6
+ let subscription;
7
+ beforeEach(() => {
8
+ context.query.setOrigin('https://example.com');
9
+ callback = sinon.stub();
10
+ subscription = context.query.subscribe(callback, { minAge: 18 });
11
+ });
12
+ afterEach(() => {
13
+ if (subscription) {
14
+ subscription.unsubscribe();
15
+ }
16
+ });
17
+ it('should not call callback immediately', () => {
18
+ callback.called.should.be.false;
19
+ });
20
+ }));
21
+ //# sourceMappingURL=with_client_validation_passing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_client_validation_passing.js","sourceRoot":"","sources":["../../../../../queries/for_ObservableQueryFor/when_subscribing/with_client_validation_passing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AACjG,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAQ,CAAC,iDAAiD,EAAE,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,EAAE;IAC5G,IAAI,QAAyB,CAAC;IAC9B,IAAI,YAAiD,CAAC;IAEtD,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/C,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAExB,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,YAAY,EAAE,CAAC;YACf,YAAY,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC,CAAC,CAAC;IAIH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC"}