@cratis/arc 22.142.0 → 22.144.0
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/commands/Command.ts +6 -0
- package/commands/for_Command/PayInvoice.ts +20 -0
- package/commands/for_Command/when_getting_the_slice_location.ts +21 -0
- package/dist/cjs/commands/Command.d.ts +2 -0
- package/dist/cjs/commands/Command.d.ts.map +1 -1
- package/dist/cjs/commands/Command.js +4 -0
- package/dist/cjs/commands/Command.js.map +1 -1
- package/dist/cjs/queries/ObservableQueryFor.d.ts +2 -0
- package/dist/cjs/queries/ObservableQueryFor.d.ts.map +1 -1
- package/dist/cjs/queries/ObservableQueryFor.js +4 -0
- package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
- package/dist/cjs/queries/QueryFor.d.ts +2 -0
- package/dist/cjs/queries/QueryFor.d.ts.map +1 -1
- package/dist/cjs/queries/QueryFor.js +4 -0
- package/dist/cjs/queries/QueryFor.js.map +1 -1
- package/dist/cjs/reflection/SliceLocation.d.ts +12 -0
- package/dist/cjs/reflection/SliceLocation.d.ts.map +1 -0
- package/dist/cjs/reflection/SliceLocation.js +76 -0
- package/dist/cjs/reflection/SliceLocation.js.map +1 -0
- package/dist/cjs/reflection/index.d.ts +1 -0
- package/dist/cjs/reflection/index.d.ts.map +1 -1
- package/dist/cjs/reflection/index.js +2 -0
- package/dist/cjs/reflection/index.js.map +1 -1
- package/dist/esm/commands/Command.d.ts +2 -0
- package/dist/esm/commands/Command.d.ts.map +1 -1
- package/dist/esm/commands/Command.js +4 -0
- package/dist/esm/commands/Command.js.map +1 -1
- package/dist/esm/commands/for_Command/PayInvoice.d.ts +11 -0
- package/dist/esm/commands/for_Command/PayInvoice.d.ts.map +1 -0
- package/dist/esm/commands/for_Command/PayInvoice.js +14 -0
- package/dist/esm/commands/for_Command/PayInvoice.js.map +1 -0
- package/dist/esm/commands/for_Command/when_getting_the_slice_location.d.ts +2 -0
- package/dist/esm/commands/for_Command/when_getting_the_slice_location.d.ts.map +1 -0
- package/dist/esm/commands/for_Command/when_getting_the_slice_location.js +15 -0
- package/dist/esm/commands/for_Command/when_getting_the_slice_location.js.map +1 -0
- package/dist/esm/queries/ObservableQueryFor.d.ts +2 -0
- package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
- package/dist/esm/queries/ObservableQueryFor.js +4 -0
- package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
- package/dist/esm/queries/QueryFor.d.ts +2 -0
- package/dist/esm/queries/QueryFor.d.ts.map +1 -1
- package/dist/esm/queries/QueryFor.js +4 -0
- package/dist/esm/queries/QueryFor.js.map +1 -1
- package/dist/esm/queries/for_ObservableQueryFor/when_getting_the_slice_location.d.ts +2 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_getting_the_slice_location.d.ts.map +1 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_getting_the_slice_location.js +27 -0
- package/dist/esm/queries/for_ObservableQueryFor/when_getting_the_slice_location.js.map +1 -0
- package/dist/esm/queries/for_QueryFor/when_getting_the_slice_location.d.ts +2 -0
- package/dist/esm/queries/for_QueryFor/when_getting_the_slice_location.d.ts.map +1 -0
- package/dist/esm/queries/for_QueryFor/when_getting_the_slice_location.js +27 -0
- package/dist/esm/queries/for_QueryFor/when_getting_the_slice_location.js.map +1 -0
- package/dist/esm/reflection/SliceLocation.d.ts +12 -0
- package/dist/esm/reflection/SliceLocation.d.ts.map +1 -0
- package/dist/esm/reflection/SliceLocation.js +74 -0
- package/dist/esm/reflection/SliceLocation.js.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_converting_to_string.d.ts +2 -0
- package/dist/esm/reflection/for_SliceLocation/when_converting_to_string.d.ts.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_converting_to_string.js +6 -0
- package/dist/esm/reflection/for_SliceLocation/when_converting_to_string.js.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_a_type.d.ts +2 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_a_type.d.ts.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_a_type.js +29 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_a_type.js.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_none.d.ts +2 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_none.d.ts.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_none.js +14 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_none.js.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_one.d.ts +2 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_one.d.ts.map +1 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_one.js +12 -0
- package/dist/esm/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_one.js.map +1 -0
- package/dist/esm/reflection/index.d.ts +1 -0
- package/dist/esm/reflection/index.d.ts.map +1 -1
- package/dist/esm/reflection/index.js +1 -0
- package/dist/esm/reflection/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/queries/ObservableQueryFor.ts +6 -0
- package/queries/QueryFor.ts +6 -0
- package/queries/for_ObservableQueryFor/when_getting_the_slice_location.ts +37 -0
- package/queries/for_QueryFor/when_getting_the_slice_location.ts +37 -0
- package/reflection/SliceLocation.ts +78 -0
- package/reflection/for_SliceLocation/when_converting_to_string.ts +9 -0
- package/reflection/for_SliceLocation/when_getting_it_of_a_type.ts +38 -0
- package/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_none.ts +20 -0
- package/reflection/for_SliceLocation/when_getting_it_of_an_instance_whose_class_declares_one.ts +18 -0
- package/reflection/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../reflection/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../reflection/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var ParameterDescriptor = require('./ParameterDescriptor.js');
|
|
4
4
|
var ParametersHelper = require('./ParametersHelper.js');
|
|
5
5
|
var PropertyDescriptor = require('./PropertyDescriptor.js');
|
|
6
|
+
var SliceLocation = require('./SliceLocation.js');
|
|
6
7
|
|
|
7
8
|
// Copyright (c) Cratis. All rights reserved.
|
|
8
9
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
@@ -10,4 +11,5 @@ var PropertyDescriptor = require('./PropertyDescriptor.js');
|
|
|
10
11
|
exports.ParameterDescriptor = ParameterDescriptor.ParameterDescriptor;
|
|
11
12
|
exports.ParametersHelper = ParametersHelper.ParametersHelper;
|
|
12
13
|
exports.PropertyDescriptor = PropertyDescriptor.PropertyDescriptor;
|
|
14
|
+
exports.SliceLocation = SliceLocation.SliceLocation;
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../reflection/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 './IHaveParameters.js';\nexport * from './ParameterDescriptor.js';\nexport * from './ParametersHelper.js';\nexport * from './PropertyDescriptor.js';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../reflection/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 './IHaveParameters.js';\nexport * from './ParameterDescriptor.js';\nexport * from './ParametersHelper.js';\nexport * from './PropertyDescriptor.js';\nexport * from './SliceLocation.js';\n"],"names":[],"mappings":";;;;;;;AAAA;AACA;;;;;"}
|
|
@@ -4,10 +4,12 @@ import { CommandValidator } from './CommandValidator.js';
|
|
|
4
4
|
import { Constructor } from '@cratis/fundamentals';
|
|
5
5
|
import { GetHttpHeaders } from '../GetHttpHeaders.js';
|
|
6
6
|
import { PropertyDescriptor } from '../reflection/PropertyDescriptor.js';
|
|
7
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
7
8
|
import { ValidationResultSeverity } from '../validation/ValidationResultSeverity.js';
|
|
8
9
|
export declare abstract class Command<TCommandContent = object, TCommandResponse = object> implements ICommand<TCommandContent, TCommandResponse> {
|
|
9
10
|
readonly _responseType: Constructor;
|
|
10
11
|
readonly _isResponseTypeEnumerable: boolean;
|
|
12
|
+
static readonly sliceLocation: SliceLocation;
|
|
11
13
|
private _microservice;
|
|
12
14
|
private _apiBasePath;
|
|
13
15
|
private _origin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../commands/Command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../commands/Command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAcrF,8BAAsB,OAAO,CAAC,eAAe,GAAG,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAE,YAAW,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IA6BzH,QAAQ,CAAC,aAAa,EAAE,WAAW;IAAW,QAAQ,CAAC,yBAAyB,EAAE,OAAO;IAzBrG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAuB;IAEnE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAAiB;IAC7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE5C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,wBAAwB,CAAC;IAC9D,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC5D,QAAQ,KAAK,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAE3C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAkB;IAOpC,YAAqB,aAAa,EAAE,WAAW,YAAS,EAAW,yBAAyB,EAAE,OAAO,EAKpG;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;IAGK,OAAO,CAAC,eAAe,CAAC,EAAE,wBAAwB,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAwB5H;IAGK,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CA2BzD;IAGD,kBAAkB,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAwBpD;IAED,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,YAAY;YAuBN,cAAc;IA+B5B,KAAK,IAAI,IAAI,CAOZ;IAGD,gBAAgB,CAAC,MAAM,EAAE,eAAe,QASvC;IAGD,iCAAiC,SAQhC;IAGD,aAAa,IAAI,IAAI,CAKpB;IAGD,IAAI,UAAU,YAEb;IAGD,eAAe,CAAC,QAAQ,EAAE,MAAM,QAY/B;IAGD,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,QAK3D;IAED,OAAO,CAAC,gBAAgB;CAM3B"}
|
|
@@ -3,6 +3,7 @@ import { JsonSerializer } from '@cratis/fundamentals';
|
|
|
3
3
|
import { Globals } from '../Globals.js';
|
|
4
4
|
import { joinPaths } from '../joinPaths.js';
|
|
5
5
|
import { UrlHelpers } from '../UrlHelpers.js';
|
|
6
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
6
7
|
import { ValidationResult } from '../validation/ValidationResult.js';
|
|
7
8
|
import { ValidationResultSeverity } from '../validation/ValidationResultSeverity.js';
|
|
8
9
|
import { ValidationResultReason } from '../validation/ValidationResultReason.js';
|
|
@@ -17,6 +18,9 @@ import { ValidationResultReasonDetail } from '../validation/ValidationResultReas
|
|
|
17
18
|
*/ class Command {
|
|
18
19
|
_responseType;
|
|
19
20
|
_isResponseTypeEnumerable;
|
|
21
|
+
/**
|
|
22
|
+
* Gets the {@link SliceLocation} of the command. Generated proxies override it with the location resolved from the backend namespace.
|
|
23
|
+
*/ static sliceLocation = SliceLocation.empty;
|
|
20
24
|
_microservice;
|
|
21
25
|
_apiBasePath;
|
|
22
26
|
_origin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Command.js","sources":["../../../commands/Command.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 { ICommand, PropertyChanged } from './ICommand.js';\nimport { CommandResult } from \"./CommandResult.js\";\nimport { CommandValidator } from './CommandValidator.js';\nimport { Constructor, JsonSerializer } from '@cratis/fundamentals';\nimport { Globals } from '../Globals.js';\nimport { joinPaths } from '../joinPaths.js';\nimport { UrlHelpers } from '../UrlHelpers.js';\nimport { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport { PropertyDescriptor } from '../reflection/PropertyDescriptor.js';\nimport { ValidationResult } from '../validation/ValidationResult.js';\nimport { ValidationResultSeverity } from '../validation/ValidationResultSeverity.js';\nimport { ValidationResultReason } from '../validation/ValidationResultReason.js';\nimport { ValidationResultReasonDetail } from '../validation/ValidationResultReasonDetail.js';\n\ntype Callback = {\n callback: WeakRef<PropertyChanged>;\n thisArg: WeakRef<object>;\n}\n\n/**\n * Represents an implementation of {@link ICommand} that works with HTTP fetch.\n * Missing required properties produce a {@link ValidationResultReason.Rule} result with\n * {@link ValidationResultReasonDetail.Required}, without contacting the server.\n */\nexport abstract class Command<TCommandContent = object, TCommandResponse = object> implements ICommand<TCommandContent, TCommandResponse> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _httpHeadersCallback: GetHttpHeaders;\n abstract readonly route: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n readonly validation?: CommandValidator<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n readonly roles: string[] = [];\n /** Inclusive minimum blocking severity declared by a model-bound command proxy. */\n readonly blockOnValidationSeverity?: ValidationResultSeverity;\n abstract readonly propertyDescriptors: PropertyDescriptor[];\n abstract get requestParameters(): string[];\n\n private _initialValues: object = {};\n private _hasChanges = false;\n private _callbacks: Callback[] = [];\n\n /**\n * Initializes a new instance of the {@link Command<,>} class.\n * @param _responseType Type of response.\n * @param _isResponseTypeEnumerable Whether or not the response type is enumerable.\n */\n constructor(readonly _responseType: Constructor = Object, readonly _isResponseTypeEnumerable: boolean) {\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 async execute(allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): Promise<CommandResult<TCommandResponse>> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors, allowedSeverity, ignoreWarnings);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors, allowedSeverity, ignoreWarnings);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n let actualRoute = this.route;\n\n if (this.requestParameters && this.requestParameters.length > 0) {\n const payload = this.buildPayload();\n const { route } = UrlHelpers.replaceRouteParameters(this.route, payload);\n actualRoute = route;\n }\n\n const result = await this.performRequest(actualRoute, 'Command not found at route', 'Error during server call', allowedSeverity, ignoreWarnings);\n this.setInitialValuesFromCurrentValues();\n return result;\n }\n\n /** @inheritdoc */\n async validate(): Promise<CommandResult<TCommandResponse>> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n let actualRoute = this.route;\n\n if (this.requestParameters && this.requestParameters.length > 0) {\n const payload = this.buildPayload();\n const { route } = UrlHelpers.replaceRouteParameters(this.route, payload);\n actualRoute = route;\n }\n\n actualRoute = `${actualRoute}/validate`;\n const result = await this.performRequest(actualRoute, 'Command validation endpoint not found at route', 'Error during validation call');\n if (result.isSuccess && clientValidationErrors.length > 0) {\n return Object.assign(result, { validationResults: [...result.validationResults, ...clientValidationErrors] });\n }\n return result;\n }\n\n /** @inheritdoc */\n validateClientSide(): CommandResult<TCommandResponse> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n const advisoryResults = [...clientValidationErrors, ...validationErrors];\n if (advisoryResults.length === 0) {\n return CommandResult.empty as CommandResult<TCommandResponse>;\n }\n\n return new CommandResult({\n ...CommandResult.empty,\n correlationId: CommandResult.empty.correlationId.toString(),\n validationResults: advisoryResults,\n response: null\n }, Object, false) as CommandResult<TCommandResponse>;\n }\n\n private buildPayload(): object {\n const payload = {};\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n payload[property] = this[property];\n });\n return payload;\n }\n\n private validateRequiredProperties(): ValidationResult[] {\n const validationErrors: ValidationResult[] = [];\n this.propertyDescriptors.forEach(propertyDescriptor => {\n if (!propertyDescriptor.isOptional && !this.requestParameters.includes(propertyDescriptor.name)) {\n const value = this[propertyDescriptor.name];\n if (value === undefined || value === null) {\n validationErrors.push(new ValidationResult(\n ValidationResultSeverity.Error,\n `${propertyDescriptor.name} is required`,\n [propertyDescriptor.name],\n null,\n ValidationResultReason.Rule,\n ValidationResultReasonDetail.Required\n ));\n }\n }\n });\n return validationErrors;\n }\n\n private filterValidationResultsBySeverity(validationResults: ValidationResult[], allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): ValidationResult[] {\n if (this.blockOnValidationSeverity !== undefined) {\n const effectiveAllowed = Math.min(allowedSeverity ?? ValidationResultSeverity.Error, this.blockOnValidationSeverity - 1);\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Unknown || result.severity > effectiveAllowed);\n }\n if (ignoreWarnings === true) {\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Error);\n }\n if (allowedSeverity === undefined) {\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Error);\n }\n return validationResults.filter(result => result.severity > allowedSeverity);\n }\n\n private buildHeaders(allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): HeadersInit {\n const customHeaders = this._httpHeadersCallback?.() ?? {};\n const headers = {\n ...customHeaders,\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 if (allowedSeverity !== undefined) {\n headers['X-Allowed-Severity'] = allowedSeverity.toString();\n }\n\n if (ignoreWarnings === true) {\n headers['X-Ignore-Warnings'] = 'true';\n }\n\n return headers;\n }\n\n private async performRequest(\n route: string,\n notFoundMessage: string,\n errorMessage: string,\n allowedSeverity?: ValidationResultSeverity,\n ignoreWarnings?: boolean\n ): Promise<CommandResult<TCommandResponse>> {\n const payload = this.buildPayload();\n const headers = this.buildHeaders(allowedSeverity, ignoreWarnings);\n const actualRoute = joinPaths(this._apiBasePath, route);\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JsonSerializer.serialize(payload)\n });\n\n if (response.status === 404) {\n return CommandResult.failed([`${notFoundMessage} '${actualRoute}'`]) as CommandResult<TCommandResponse>;\n }\n\n const result = await response.json();\n return new CommandResult(result, this._responseType, this._isResponseTypeEnumerable);\n } catch (ex) {\n return CommandResult.failed([`${errorMessage}: ${ex}`]) as CommandResult<TCommandResponse>;\n }\n }\n\n /** @inheritdoc */\n clear(): void {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n this[property] = undefined;\n });\n this._initialValues = {};\n this._hasChanges = false;\n }\n\n /** @inheritdoc */\n setInitialValues(values: TCommandContent) {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n if (Object.prototype.hasOwnProperty.call(values, property)) {\n this._initialValues[property] = values[property];\n this[property] = values[property];\n }\n });\n this.updateHasChanges();\n }\n\n /** @inheritdoc */\n setInitialValuesFromCurrentValues() {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n if (this[property]) {\n this._initialValues[property] = this[property];\n }\n });\n this.updateHasChanges();\n }\n\n /** @inheritdoc */\n revertChanges(): void {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n this[property] = this._initialValues[property];\n });\n }\n\n /** @inheritdoc */\n get hasChanges() {\n return this._hasChanges;\n }\n\n /** @inheritdoc */\n propertyChanged(property: string) {\n this.updateHasChanges();\n\n this._callbacks.forEach(callbackContainer => {\n const callback = callbackContainer.callback.deref();\n const thisArg = callbackContainer.thisArg.deref();\n if (callback && thisArg) {\n callback.call(thisArg, property);\n } else {\n this._callbacks = this._callbacks.filter(_ => _.callback !== callbackContainer.callback);\n }\n });\n }\n\n /** @inheritdoc */\n onPropertyChanged(callback: PropertyChanged, thisArg: object) {\n this._callbacks.push({\n callback: new WeakRef(callback),\n thisArg: new WeakRef(thisArg)\n });\n }\n\n private updateHasChanges() {\n this._hasChanges = this.propertyDescriptors.some(propertyDescriptor => {\n const property = propertyDescriptor.name;\n return this[property] !== this._initialValues[property];\n });\n }\n}\n"],"names":["Command","_microservice","_apiBasePath","_origin","_httpHeadersCallback","validation","roles","blockOnValidationSeverity","_initialValues","_hasChanges","_callbacks","_responseType","Object","_isResponseTypeEnumerable","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","execute","allowedSeverity","ignoreWarnings","clientValidationErrors","validate","filteredClientErrors","filterValidationResultsBySeverity","length","CommandResult","validationFailed","validationErrors","validateRequiredProperties","filteredRequiredErrors","actualRoute","route","requestParameters","payload","buildPayload","UrlHelpers","replaceRouteParameters","result","performRequest","setInitialValuesFromCurrentValues","isSuccess","assign","validationResults","validateClientSide","advisoryResults","empty","correlationId","toString","response","propertyDescriptors","forEach","propertyDescriptor","property","name","isOptional","includes","value","undefined","push","ValidationResult","ValidationResultSeverity","Error","ValidationResultReason","Rule","ValidationResultReasonDetail","Required","effectiveAllowed","Math","min","filter","severity","Unknown","buildHeaders","customHeaders","headers","microserviceHttpHeader","notFoundMessage","errorMessage","joinPaths","url","createUrlFrom","fetch","method","body","JsonSerializer","serialize","status","failed","json","ex","clear","setInitialValues","values","prototype","hasOwnProperty","call","updateHasChanges","revertChanges","hasChanges","propertyChanged","callbackContainer","deref","thisArg","_","onPropertyChanged","WeakRef","some"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Command.js","sources":["../../../commands/Command.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 { ICommand, PropertyChanged } from './ICommand.js';\nimport { CommandResult } from \"./CommandResult.js\";\nimport { CommandValidator } from './CommandValidator.js';\nimport { Constructor, JsonSerializer } from '@cratis/fundamentals';\nimport { Globals } from '../Globals.js';\nimport { joinPaths } from '../joinPaths.js';\nimport { UrlHelpers } from '../UrlHelpers.js';\nimport { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport { PropertyDescriptor } from '../reflection/PropertyDescriptor.js';\nimport { SliceLocation } from '../reflection/SliceLocation.js';\nimport { ValidationResult } from '../validation/ValidationResult.js';\nimport { ValidationResultSeverity } from '../validation/ValidationResultSeverity.js';\nimport { ValidationResultReason } from '../validation/ValidationResultReason.js';\nimport { ValidationResultReasonDetail } from '../validation/ValidationResultReasonDetail.js';\n\ntype Callback = {\n callback: WeakRef<PropertyChanged>;\n thisArg: WeakRef<object>;\n}\n\n/**\n * Represents an implementation of {@link ICommand} that works with HTTP fetch.\n * Missing required properties produce a {@link ValidationResultReason.Rule} result with\n * {@link ValidationResultReasonDetail.Required}, without contacting the server.\n */\nexport abstract class Command<TCommandContent = object, TCommandResponse = object> implements ICommand<TCommandContent, TCommandResponse> {\n /**\n * Gets the {@link SliceLocation} of the command. Generated proxies override it with the location resolved from the backend namespace.\n */\n static readonly sliceLocation: SliceLocation = SliceLocation.empty;\n\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _httpHeadersCallback: GetHttpHeaders;\n abstract readonly route: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n readonly validation?: CommandValidator<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n readonly roles: string[] = [];\n /** Inclusive minimum blocking severity declared by a model-bound command proxy. */\n readonly blockOnValidationSeverity?: ValidationResultSeverity;\n abstract readonly propertyDescriptors: PropertyDescriptor[];\n abstract get requestParameters(): string[];\n\n private _initialValues: object = {};\n private _hasChanges = false;\n private _callbacks: Callback[] = [];\n\n /**\n * Initializes a new instance of the {@link Command<,>} class.\n * @param _responseType Type of response.\n * @param _isResponseTypeEnumerable Whether or not the response type is enumerable.\n */\n constructor(readonly _responseType: Constructor = Object, readonly _isResponseTypeEnumerable: boolean) {\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 async execute(allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): Promise<CommandResult<TCommandResponse>> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors, allowedSeverity, ignoreWarnings);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors, allowedSeverity, ignoreWarnings);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n let actualRoute = this.route;\n\n if (this.requestParameters && this.requestParameters.length > 0) {\n const payload = this.buildPayload();\n const { route } = UrlHelpers.replaceRouteParameters(this.route, payload);\n actualRoute = route;\n }\n\n const result = await this.performRequest(actualRoute, 'Command not found at route', 'Error during server call', allowedSeverity, ignoreWarnings);\n this.setInitialValuesFromCurrentValues();\n return result;\n }\n\n /** @inheritdoc */\n async validate(): Promise<CommandResult<TCommandResponse>> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n let actualRoute = this.route;\n\n if (this.requestParameters && this.requestParameters.length > 0) {\n const payload = this.buildPayload();\n const { route } = UrlHelpers.replaceRouteParameters(this.route, payload);\n actualRoute = route;\n }\n\n actualRoute = `${actualRoute}/validate`;\n const result = await this.performRequest(actualRoute, 'Command validation endpoint not found at route', 'Error during validation call');\n if (result.isSuccess && clientValidationErrors.length > 0) {\n return Object.assign(result, { validationResults: [...result.validationResults, ...clientValidationErrors] });\n }\n return result;\n }\n\n /** @inheritdoc */\n validateClientSide(): CommandResult<TCommandResponse> {\n const clientValidationErrors = this.validation?.validate(this) || [];\n const filteredClientErrors = this.filterValidationResultsBySeverity(clientValidationErrors);\n if (filteredClientErrors.length > 0) {\n return CommandResult.validationFailed(filteredClientErrors) as CommandResult<TCommandResponse>;\n }\n\n const validationErrors = this.validateRequiredProperties();\n const filteredRequiredErrors = this.filterValidationResultsBySeverity(validationErrors);\n if (filteredRequiredErrors.length > 0) {\n return CommandResult.validationFailed(filteredRequiredErrors) as CommandResult<TCommandResponse>;\n }\n\n const advisoryResults = [...clientValidationErrors, ...validationErrors];\n if (advisoryResults.length === 0) {\n return CommandResult.empty as CommandResult<TCommandResponse>;\n }\n\n return new CommandResult({\n ...CommandResult.empty,\n correlationId: CommandResult.empty.correlationId.toString(),\n validationResults: advisoryResults,\n response: null\n }, Object, false) as CommandResult<TCommandResponse>;\n }\n\n private buildPayload(): object {\n const payload = {};\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n payload[property] = this[property];\n });\n return payload;\n }\n\n private validateRequiredProperties(): ValidationResult[] {\n const validationErrors: ValidationResult[] = [];\n this.propertyDescriptors.forEach(propertyDescriptor => {\n if (!propertyDescriptor.isOptional && !this.requestParameters.includes(propertyDescriptor.name)) {\n const value = this[propertyDescriptor.name];\n if (value === undefined || value === null) {\n validationErrors.push(new ValidationResult(\n ValidationResultSeverity.Error,\n `${propertyDescriptor.name} is required`,\n [propertyDescriptor.name],\n null,\n ValidationResultReason.Rule,\n ValidationResultReasonDetail.Required\n ));\n }\n }\n });\n return validationErrors;\n }\n\n private filterValidationResultsBySeverity(validationResults: ValidationResult[], allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): ValidationResult[] {\n if (this.blockOnValidationSeverity !== undefined) {\n const effectiveAllowed = Math.min(allowedSeverity ?? ValidationResultSeverity.Error, this.blockOnValidationSeverity - 1);\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Unknown || result.severity > effectiveAllowed);\n }\n if (ignoreWarnings === true) {\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Error);\n }\n if (allowedSeverity === undefined) {\n return validationResults.filter(result => result.severity === ValidationResultSeverity.Error);\n }\n return validationResults.filter(result => result.severity > allowedSeverity);\n }\n\n private buildHeaders(allowedSeverity?: ValidationResultSeverity, ignoreWarnings?: boolean): HeadersInit {\n const customHeaders = this._httpHeadersCallback?.() ?? {};\n const headers = {\n ...customHeaders,\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 if (allowedSeverity !== undefined) {\n headers['X-Allowed-Severity'] = allowedSeverity.toString();\n }\n\n if (ignoreWarnings === true) {\n headers['X-Ignore-Warnings'] = 'true';\n }\n\n return headers;\n }\n\n private async performRequest(\n route: string,\n notFoundMessage: string,\n errorMessage: string,\n allowedSeverity?: ValidationResultSeverity,\n ignoreWarnings?: boolean\n ): Promise<CommandResult<TCommandResponse>> {\n const payload = this.buildPayload();\n const headers = this.buildHeaders(allowedSeverity, ignoreWarnings);\n const actualRoute = joinPaths(this._apiBasePath, route);\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JsonSerializer.serialize(payload)\n });\n\n if (response.status === 404) {\n return CommandResult.failed([`${notFoundMessage} '${actualRoute}'`]) as CommandResult<TCommandResponse>;\n }\n\n const result = await response.json();\n return new CommandResult(result, this._responseType, this._isResponseTypeEnumerable);\n } catch (ex) {\n return CommandResult.failed([`${errorMessage}: ${ex}`]) as CommandResult<TCommandResponse>;\n }\n }\n\n /** @inheritdoc */\n clear(): void {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n this[property] = undefined;\n });\n this._initialValues = {};\n this._hasChanges = false;\n }\n\n /** @inheritdoc */\n setInitialValues(values: TCommandContent) {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n if (Object.prototype.hasOwnProperty.call(values, property)) {\n this._initialValues[property] = values[property];\n this[property] = values[property];\n }\n });\n this.updateHasChanges();\n }\n\n /** @inheritdoc */\n setInitialValuesFromCurrentValues() {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n if (this[property]) {\n this._initialValues[property] = this[property];\n }\n });\n this.updateHasChanges();\n }\n\n /** @inheritdoc */\n revertChanges(): void {\n this.propertyDescriptors.forEach(propertyDescriptor => {\n const property = propertyDescriptor.name;\n this[property] = this._initialValues[property];\n });\n }\n\n /** @inheritdoc */\n get hasChanges() {\n return this._hasChanges;\n }\n\n /** @inheritdoc */\n propertyChanged(property: string) {\n this.updateHasChanges();\n\n this._callbacks.forEach(callbackContainer => {\n const callback = callbackContainer.callback.deref();\n const thisArg = callbackContainer.thisArg.deref();\n if (callback && thisArg) {\n callback.call(thisArg, property);\n } else {\n this._callbacks = this._callbacks.filter(_ => _.callback !== callbackContainer.callback);\n }\n });\n }\n\n /** @inheritdoc */\n onPropertyChanged(callback: PropertyChanged, thisArg: object) {\n this._callbacks.push({\n callback: new WeakRef(callback),\n thisArg: new WeakRef(thisArg)\n });\n }\n\n private updateHasChanges() {\n this._hasChanges = this.propertyDescriptors.some(propertyDescriptor => {\n const property = propertyDescriptor.name;\n return this[property] !== this._initialValues[property];\n });\n }\n}\n"],"names":["Command","sliceLocation","SliceLocation","empty","_microservice","_apiBasePath","_origin","_httpHeadersCallback","validation","roles","blockOnValidationSeverity","_initialValues","_hasChanges","_callbacks","_responseType","Object","_isResponseTypeEnumerable","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","execute","allowedSeverity","ignoreWarnings","clientValidationErrors","validate","filteredClientErrors","filterValidationResultsBySeverity","length","CommandResult","validationFailed","validationErrors","validateRequiredProperties","filteredRequiredErrors","actualRoute","route","requestParameters","payload","buildPayload","UrlHelpers","replaceRouteParameters","result","performRequest","setInitialValuesFromCurrentValues","isSuccess","assign","validationResults","validateClientSide","advisoryResults","correlationId","toString","response","propertyDescriptors","forEach","propertyDescriptor","property","name","isOptional","includes","value","undefined","push","ValidationResult","ValidationResultSeverity","Error","ValidationResultReason","Rule","ValidationResultReasonDetail","Required","effectiveAllowed","Math","min","filter","severity","Unknown","buildHeaders","customHeaders","headers","microserviceHttpHeader","notFoundMessage","errorMessage","joinPaths","url","createUrlFrom","fetch","method","body","JsonSerializer","serialize","status","failed","json","ex","clear","setInitialValues","values","prototype","hasOwnProperty","call","updateHasChanges","revertChanges","hasChanges","propertyChanged","callbackContainer","deref","thisArg","_","onPropertyChanged","WeakRef","some"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '../Command.js';
|
|
2
|
+
import { PropertyDescriptor } from '../../reflection/PropertyDescriptor.js';
|
|
3
|
+
import { SliceLocation } from '../../reflection/SliceLocation.js';
|
|
4
|
+
export declare class PayInvoice extends Command {
|
|
5
|
+
static readonly sliceLocation: SliceLocation;
|
|
6
|
+
readonly route: string;
|
|
7
|
+
readonly propertyDescriptors: PropertyDescriptor[];
|
|
8
|
+
constructor();
|
|
9
|
+
get requestParameters(): string[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PayInvoice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayInvoice.d.ts","sourceRoot":"","sources":["../../../../commands/for_Command/PayInvoice.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,qBAAa,UAAW,SAAQ,OAAO;IACnC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAmD;IAC/F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAA+B;IACrD,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAExD,cAEC;IAED,IAAI,iBAAiB,IAAI,MAAM,EAAE,CAEhC;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '../Command.js';
|
|
2
|
+
import { SliceLocation } from '../../reflection/SliceLocation.js';
|
|
3
|
+
export class PayInvoice extends Command {
|
|
4
|
+
static sliceLocation = new SliceLocation('Billing', 'Invoices', 'Pay');
|
|
5
|
+
route = '/api/billing/invoices/pay';
|
|
6
|
+
propertyDescriptors = [];
|
|
7
|
+
constructor() {
|
|
8
|
+
super(Object, false);
|
|
9
|
+
}
|
|
10
|
+
get requestParameters() {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=PayInvoice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayInvoice.js","sourceRoot":"","sources":["../../../../commands/for_Command/PayInvoice.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,OAAO,UAAW,SAAQ,OAAO;IACnC,MAAM,CAAU,aAAa,GAAkB,IAAI,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACtF,KAAK,GAAW,2BAA2B,CAAC;IAC5C,mBAAmB,GAAyB,EAAE,CAAC;IAExD;QACI,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,iBAAiB;QACjB,OAAO,EAAE,CAAC;IACd,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_getting_the_slice_location.d.ts","sourceRoot":"","sources":["../../../../commands/for_Command/when_getting_the_slice_location.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PayInvoice } from './PayInvoice.js';
|
|
2
|
+
import { SomeCommand } from './SomeCommand.js';
|
|
3
|
+
import { SliceLocation } from '../../reflection/SliceLocation.js';
|
|
4
|
+
describe('when getting the slice location', () => {
|
|
5
|
+
let declared;
|
|
6
|
+
let undeclared;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
const command = new PayInvoice();
|
|
9
|
+
declared = SliceLocation.of(command);
|
|
10
|
+
undeclared = SliceLocation.of(new SomeCommand());
|
|
11
|
+
});
|
|
12
|
+
it('should return the static slice location of the proxy class', () => declared.should.equal(PayInvoice.sliceLocation));
|
|
13
|
+
it('should return the empty slice location when the class declares none', () => undeclared.should.equal(SliceLocation.empty));
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=when_getting_the_slice_location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_getting_the_slice_location.js","sourceRoot":"","sources":["../../../../commands/for_Command/when_getting_the_slice_location.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC7C,IAAI,QAAmC,CAAC;IACxC,IAAI,UAAqC,CAAC;IAE1C,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,OAAO,GAAa,IAAI,UAAU,EAAE,CAAC;QAC3C,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACrC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE,CAAC,QAAS,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IACzH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE,CAAC,UAAW,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACnI,CAAC,CAAC,CAAC"}
|
|
@@ -7,10 +7,12 @@ import { Sorting } from './Sorting.js';
|
|
|
7
7
|
import { Paging } from './Paging.js';
|
|
8
8
|
import type { GetHttpHeaders } from '../GetHttpHeaders.js';
|
|
9
9
|
import type { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';
|
|
10
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
10
11
|
import type { QueryHttpMethod } from './QueryHttpMethod.js';
|
|
11
12
|
export declare abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {
|
|
12
13
|
readonly modelType: Constructor;
|
|
13
14
|
readonly enumerable: boolean;
|
|
15
|
+
static readonly sliceLocation: SliceLocation;
|
|
14
16
|
private _microservice;
|
|
15
17
|
private _apiBasePath;
|
|
16
18
|
private _origin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAS5D,8BAAsB,kBAAkB,CACpC,SAAS,EACT,WAAW,GAAG,MAAM,CACtB,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAS5D,8BAAsB,kBAAkB,CACpC,SAAS,EACT,WAAW,GAAG,MAAM,CACtB,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IA8BhD,QAAQ,CAAC,SAAS,EAAE,WAAW;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO;IA3BhC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAuB;IAEnE,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,YACa,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,OAAO,EAQ/B;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,CACL,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAC9C,IAAI,CAAC,EAAE,WAAW,GACnB,2BAA2B,CAAC,SAAS,CAAC,CA8DxC;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAgDjE;IAED,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,iBAAiB;CAO5B"}
|
|
@@ -10,6 +10,7 @@ import { SortDirection } from './SortDirection.js';
|
|
|
10
10
|
import { Globals } from '../Globals.js';
|
|
11
11
|
import { UrlHelpers } from '../UrlHelpers.js';
|
|
12
12
|
import { ParametersHelper } from '../reflection/ParametersHelper.js';
|
|
13
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
13
14
|
import { executeQueryHttpRequest } from './QueryHttpRequest.js';
|
|
14
15
|
|
|
15
16
|
// Copyright (c) Cratis. All rights reserved.
|
|
@@ -20,6 +21,9 @@ import { executeQueryHttpRequest } from './QueryHttpRequest.js';
|
|
|
20
21
|
*/ class ObservableQueryFor {
|
|
21
22
|
modelType;
|
|
22
23
|
enumerable;
|
|
24
|
+
/**
|
|
25
|
+
* Gets the {@link SliceLocation} of the query. Generated proxies override it with the location resolved from the backend namespace.
|
|
26
|
+
*/ static sliceLocation = SliceLocation.empty;
|
|
23
27
|
_microservice;
|
|
24
28
|
_apiBasePath;
|
|
25
29
|
_origin;
|
|
@@ -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 type { IObservableQueryFor, OnNextResult } from './IObservableQueryFor.js';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription.js';\nimport { ValidateRequestArguments } from './ValidateRequestArguments.js';\nimport type { QueryValidator } from './QueryValidator.js';\nimport type { IObservableQueryConnection } from './IObservableQueryConnection.js';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection.js';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory.js';\nimport type { Constructor } from '@cratis/fundamentals';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel.js';\nimport { QueryResult } from './QueryResult.js';\nimport { Sorting } from './Sorting.js';\nimport { Paging } from './Paging.js';\nimport { SortDirection } from './SortDirection.js';\nimport { Globals } from '../Globals.js';\nimport { UrlHelpers } from '../UrlHelpers.js';\nimport type { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport type { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';\nimport { ParametersHelper } from '../reflection/ParametersHelper.js';\nimport type { QueryHttpMethod } from './QueryHttpMethod.js';\nimport { executeQueryHttpRequest } from './QueryHttpRequest.js';\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<\n TDataType,\n TParameters = object,\n> 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(\n readonly modelType: Constructor,\n readonly enumerable: boolean,\n ) {\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(\n callback: OnNextResult<QueryResult<TDataType>>,\n args?: TParameters,\n ): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n const clientValidationErrors =\n 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 );\n } else if (this.validateArguments(args)) {\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 } else {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\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(\n this.route,\n args as object,\n );\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 // Observable transports deliver structural query-result envelopes directly instead of\n // constructing QueryResult. Servers predating readiness therefore omit the member;\n // those results are complete by definition and must be normalized before subscribers\n // observe them. Preserve an explicit false transient state from newer servers.\n result.isReady ??= true;\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 = {\n ...QueryResult.noSuccess,\n ...{ data: this.defaultValue },\n } as QueryResult<TDataType>;\n\n const clientValidationErrors =\n 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(\n this.constructor.name,\n this.requiredRequestParameters,\n combinedArgs as object,\n );\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 =\n 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","isReady","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","Accept","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
|
+
{"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 type { IObservableQueryFor, OnNextResult } from './IObservableQueryFor.js';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription.js';\nimport { ValidateRequestArguments } from './ValidateRequestArguments.js';\nimport type { QueryValidator } from './QueryValidator.js';\nimport type { IObservableQueryConnection } from './IObservableQueryConnection.js';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection.js';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory.js';\nimport type { Constructor } from '@cratis/fundamentals';\nimport { deserializeQueryModel, deserializeQueryModels } from './deserializeQueryModel.js';\nimport { QueryResult } from './QueryResult.js';\nimport { Sorting } from './Sorting.js';\nimport { Paging } from './Paging.js';\nimport { SortDirection } from './SortDirection.js';\nimport { Globals } from '../Globals.js';\nimport { UrlHelpers } from '../UrlHelpers.js';\nimport type { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport type { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';\nimport { ParametersHelper } from '../reflection/ParametersHelper.js';\nimport { SliceLocation } from '../reflection/SliceLocation.js';\nimport type { QueryHttpMethod } from './QueryHttpMethod.js';\nimport { executeQueryHttpRequest } from './QueryHttpRequest.js';\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<\n TDataType,\n TParameters = object,\n> implements IObservableQueryFor<TDataType, TParameters> {\n /**\n * Gets the {@link SliceLocation} of the query. Generated proxies override it with the location resolved from the backend namespace.\n */\n static readonly sliceLocation: SliceLocation = SliceLocation.empty;\n\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(\n readonly modelType: Constructor,\n readonly enumerable: boolean,\n ) {\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(\n callback: OnNextResult<QueryResult<TDataType>>,\n args?: TParameters,\n ): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n const clientValidationErrors =\n 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 );\n } else if (this.validateArguments(args)) {\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 } else {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\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(\n this.route,\n args as object,\n );\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 // Observable transports deliver structural query-result envelopes directly instead of\n // constructing QueryResult. Servers predating readiness therefore omit the member;\n // those results are complete by definition and must be normalized before subscribers\n // observe them. Preserve an explicit false transient state from newer servers.\n result.isReady ??= true;\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 = {\n ...QueryResult.noSuccess,\n ...{ data: this.defaultValue },\n } as QueryResult<TDataType>;\n\n const clientValidationErrors =\n 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(\n this.constructor.name,\n this.requiredRequestParameters,\n combinedArgs as object,\n );\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 =\n 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","sliceLocation","SliceLocation","empty","_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","isReady","deserializeResult","ex","console","log","perform","noSuccess","Promise","resolve","headers","Accept","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","deserializeQueryModels","deserializeQueryModel"],"mappings":"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"}
|
|
@@ -6,10 +6,12 @@ import { Paging } from './Paging.js';
|
|
|
6
6
|
import { Sorting } from './Sorting.js';
|
|
7
7
|
import { GetHttpHeaders } from '../GetHttpHeaders.js';
|
|
8
8
|
import { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';
|
|
9
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
9
10
|
import { QueryHttpMethod } from './QueryHttpMethod.js';
|
|
10
11
|
export declare abstract class QueryFor<TDataType, TParameters = object> implements IQueryFor<TDataType, TParameters> {
|
|
11
12
|
readonly modelType: Constructor;
|
|
12
13
|
readonly enumerable: boolean;
|
|
14
|
+
static readonly sliceLocation: SliceLocation;
|
|
13
15
|
private _microservice;
|
|
14
16
|
private _apiBasePath;
|
|
15
17
|
private _origin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryFor.d.ts","sourceRoot":"","sources":["../../../queries/QueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQvD,8BAAsB,QAAQ,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryFor.d.ts","sourceRoot":"","sources":["../../../queries/QueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQvD,8BAAsB,QAAQ,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IA+B5F,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IA3BzE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAuB;IAEnE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAAiB;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAE1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IAOpC,YAAqB,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAOxE;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;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CA8FjE;CACJ"}
|
|
@@ -4,6 +4,7 @@ import { Paging } from './Paging.js';
|
|
|
4
4
|
import { Globals } from '../Globals.js';
|
|
5
5
|
import { Sorting } from './Sorting.js';
|
|
6
6
|
import { ParametersHelper } from '../reflection/ParametersHelper.js';
|
|
7
|
+
import { SliceLocation } from '../reflection/SliceLocation.js';
|
|
7
8
|
import { executeQueryHttpRequest } from './QueryHttpRequest.js';
|
|
8
9
|
import { isAbortError } from './isAbortError.js';
|
|
9
10
|
|
|
@@ -15,6 +16,9 @@ import { isAbortError } from './isAbortError.js';
|
|
|
15
16
|
*/ class QueryFor {
|
|
16
17
|
modelType;
|
|
17
18
|
enumerable;
|
|
19
|
+
/**
|
|
20
|
+
* Gets the {@link SliceLocation} of the query. Generated proxies override it with the location resolved from the backend namespace.
|
|
21
|
+
*/ static sliceLocation = SliceLocation.empty;
|
|
18
22
|
_microservice;
|
|
19
23
|
_apiBasePath;
|
|
20
24
|
_origin;
|
|
@@ -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.js';\nimport { QueryResult } from \"./QueryResult.js\";\nimport { QueryValidator } from './QueryValidator.js';\nimport { ValidateRequestArguments } from './ValidateRequestArguments.js';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging.js';\nimport { Globals } from '../Globals.js';\nimport { Sorting } from './Sorting.js';\nimport { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';\nimport { ParametersHelper } from '../reflection/ParametersHelper.js';\nimport { QueryHttpMethod } from './QueryHttpMethod.js';\nimport { executeQueryHttpRequest } from './QueryHttpRequest.js';\nimport { isAbortError } from './isAbortError.js';\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 let response: Response;\n\n try {\n 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 } catch (error) {\n // An abort is not a failure - it is this query superseding its own in-flight request above.\n // Rethrowing lets the caller discard the superseded request so it cannot settle over the\n // newer one that now owns the result.\n if (isAbortError(error)) {\n throw error;\n }\n\n // A dead network, a CORS rejection or a DNS failure never reaches the server, so it is\n // neither an authorization nor a validation outcome - it is reported as an exception, with\n // the default value as data, exactly as every other unsuccessful result from here does.\n // Destructuring a nullish rejection value throws, which would make the `String(error)`\n // fallback written for exactly that case unreachable - so it is coerced to an object first.\n const { message } = (error ?? {}) as { message?: string };\n const failure = {\n ...QueryResult.noSuccess,\n data: this.defaultValue,\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: true,\n exceptionMessages: [message ?? String(error)],\n // Left empty on purpose. Every result the server returns has its stack trace blanked\n // unless exception detail is explicitly exposed, and consumers are told to forward\n // this field to a logger - so filling it in here would make a failure that never\n // reached the server the one case that escapes that policy. The message is what\n // diagnoses a transport failure; the browser's own frames add nothing.\n exceptionStackTrace: ''\n };\n\n // `hasData` is a prototype getter, and a spread copies own properties only - so the literal\n // above would hand every consumer of this public `IQueryResult` member `undefined` instead\n // of a boolean. Restoring the prototype makes it a real {@link QueryResult} again while\n // leaving every field value exactly as it is.\n return Object.setPrototypeOf(failure, QueryResult.prototype) as QueryResult<TDataType>;\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","error","isAbortError","message","failure","isSuccess","isAuthorized","isValid","hasExceptions","exceptionMessages","String","exceptionStackTrace","Object","setPrototypeOf","prototype","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.js';\nimport { QueryResult } from \"./QueryResult.js\";\nimport { QueryValidator } from './QueryValidator.js';\nimport { ValidateRequestArguments } from './ValidateRequestArguments.js';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging.js';\nimport { Globals } from '../Globals.js';\nimport { Sorting } from './Sorting.js';\nimport { GetHttpHeaders } from '../GetHttpHeaders.js';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor.js';\nimport { ParametersHelper } from '../reflection/ParametersHelper.js';\nimport { SliceLocation } from '../reflection/SliceLocation.js';\nimport { QueryHttpMethod } from './QueryHttpMethod.js';\nimport { executeQueryHttpRequest } from './QueryHttpRequest.js';\nimport { isAbortError } from './isAbortError.js';\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 /**\n * Gets the {@link SliceLocation} of the query. Generated proxies override it with the location resolved from the backend namespace.\n */\n static readonly sliceLocation: SliceLocation = SliceLocation.empty;\n\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 let response: Response;\n\n try {\n 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 } catch (error) {\n // An abort is not a failure - it is this query superseding its own in-flight request above.\n // Rethrowing lets the caller discard the superseded request so it cannot settle over the\n // newer one that now owns the result.\n if (isAbortError(error)) {\n throw error;\n }\n\n // A dead network, a CORS rejection or a DNS failure never reaches the server, so it is\n // neither an authorization nor a validation outcome - it is reported as an exception, with\n // the default value as data, exactly as every other unsuccessful result from here does.\n // Destructuring a nullish rejection value throws, which would make the `String(error)`\n // fallback written for exactly that case unreachable - so it is coerced to an object first.\n const { message } = (error ?? {}) as { message?: string };\n const failure = {\n ...QueryResult.noSuccess,\n data: this.defaultValue,\n isSuccess: false,\n isAuthorized: true,\n isValid: true,\n hasExceptions: true,\n exceptionMessages: [message ?? String(error)],\n // Left empty on purpose. Every result the server returns has its stack trace blanked\n // unless exception detail is explicitly exposed, and consumers are told to forward\n // this field to a logger - so filling it in here would make a failure that never\n // reached the server the one case that escapes that policy. The message is what\n // diagnoses a transport failure; the browser's own frames add nothing.\n exceptionStackTrace: ''\n };\n\n // `hasData` is a prototype getter, and a spread copies own properties only - so the literal\n // above would hand every consumer of this public `IQueryResult` member `undefined` instead\n // of a boolean. Restoring the prototype makes it a real {@link QueryResult} again while\n // leaving every field value exactly as it is.\n return Object.setPrototypeOf(failure, QueryResult.prototype) as QueryResult<TDataType>;\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","sliceLocation","SliceLocation","empty","_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","error","isAbortError","message","failure","isSuccess","isAuthorized","isValid","hasExceptions","exceptionMessages","String","exceptionStackTrace","Object","setPrototypeOf","prototype","result","json"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_getting_the_slice_location.d.ts","sourceRoot":"","sources":["../../../../queries/for_ObservableQueryFor/when_getting_the_slice_location.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ObservableQueryFor } from '../ObservableQueryFor.js';
|
|
2
|
+
import { TestObservableQuery } from './given/TestQueries.js';
|
|
3
|
+
import { SliceLocation } from '../../reflection/SliceLocation.js';
|
|
4
|
+
class ObserveInvoices extends ObservableQueryFor {
|
|
5
|
+
static sliceLocation = new SliceLocation('Billing', 'Invoices', 'Listing');
|
|
6
|
+
route = '/api/billing/invoices/observe';
|
|
7
|
+
defaultValue = [];
|
|
8
|
+
parameterDescriptors = [];
|
|
9
|
+
get requiredRequestParameters() {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
constructor() {
|
|
13
|
+
super(String, true);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
describe('when getting the slice location', () => {
|
|
17
|
+
let declared;
|
|
18
|
+
let undeclared;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
const query = new ObserveInvoices();
|
|
21
|
+
declared = SliceLocation.of(query);
|
|
22
|
+
undeclared = SliceLocation.of(new TestObservableQuery());
|
|
23
|
+
});
|
|
24
|
+
it('should return the static slice location of the proxy class', () => declared.should.equal(ObserveInvoices.sliceLocation));
|
|
25
|
+
it('should return the empty slice location when the class declares none', () => undeclared.should.equal(SliceLocation.empty));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=when_getting_the_slice_location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_getting_the_slice_location.js","sourceRoot":"","sources":["../../../../queries/for_ObservableQueryFor/when_getting_the_slice_location.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,eAAgB,SAAQ,kBAA4B;IACtD,MAAM,CAAU,aAAa,GAAkB,IAAI,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1F,KAAK,GAAG,+BAA+B,CAAC;IACxC,YAAY,GAAa,EAAE,CAAC;IAC5B,oBAAoB,GAA0B,EAAE,CAAC;IAE1D,IAAI,yBAAyB;QACzB,OAAO,EAAE,CAAC;IACd,CAAC;IAED;QACI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;CACJ;AAED,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC7C,IAAI,QAAmC,CAAC;IACxC,IAAI,UAAqC,CAAC;IAE1C,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,KAAK,GAAW,IAAI,eAAe,EAAE,CAAC;QAC5C,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACnC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE,CAAC,QAAS,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9H,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE,CAAC,UAAW,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACnI,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_getting_the_slice_location.d.ts","sourceRoot":"","sources":["../../../../queries/for_QueryFor/when_getting_the_slice_location.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { QueryFor } from '../QueryFor.js';
|
|
2
|
+
import { TestQueryFor } from './given/TestQueries.js';
|
|
3
|
+
import { SliceLocation } from '../../reflection/SliceLocation.js';
|
|
4
|
+
class AllInvoices extends QueryFor {
|
|
5
|
+
static sliceLocation = new SliceLocation('Billing', 'Invoices', 'Listing');
|
|
6
|
+
route = '/api/billing/invoices';
|
|
7
|
+
defaultValue = [];
|
|
8
|
+
parameterDescriptors = [];
|
|
9
|
+
get requiredRequestParameters() {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
constructor() {
|
|
13
|
+
super(String, true);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
describe('when getting the slice location', () => {
|
|
17
|
+
let declared;
|
|
18
|
+
let undeclared;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
const query = new AllInvoices();
|
|
21
|
+
declared = SliceLocation.of(query);
|
|
22
|
+
undeclared = SliceLocation.of(new TestQueryFor());
|
|
23
|
+
});
|
|
24
|
+
it('should return the static slice location of the proxy class', () => declared.should.equal(AllInvoices.sliceLocation));
|
|
25
|
+
it('should return the empty slice location when the class declares none', () => undeclared.should.equal(SliceLocation.empty));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=when_getting_the_slice_location.js.map
|