@cratis/arc 20.55.1 → 20.56.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.
Files changed (149) hide show
  1. package/Globals.ts +15 -0
  2. package/dist/cjs/Globals.js +2 -0
  3. package/dist/cjs/Globals.js.map +1 -1
  4. package/dist/cjs/queries/ObservableQueryFor.js +13 -23
  5. package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
  6. package/dist/cjs/queries/QueryFor.js +13 -25
  7. package/dist/cjs/queries/QueryFor.js.map +1 -1
  8. package/dist/cjs/queries/QueryHttpMethod.js +23 -0
  9. package/dist/cjs/queries/QueryHttpMethod.js.map +1 -0
  10. package/dist/cjs/queries/QueryHttpMethodResolver.js +25 -0
  11. package/dist/cjs/queries/QueryHttpMethodResolver.js.map +1 -0
  12. package/dist/cjs/queries/QueryHttpRequest.js +0 -0
  13. package/dist/cjs/queries/QueryHttpRequest.js.map +1 -0
  14. package/dist/cjs/queries/index.js +9 -0
  15. package/dist/cjs/queries/index.js.map +1 -1
  16. package/dist/esm/Globals.d.ts +4 -0
  17. package/dist/esm/Globals.d.ts.map +1 -1
  18. package/dist/esm/Globals.js +2 -0
  19. package/dist/esm/Globals.js.map +1 -1
  20. package/dist/esm/queries/IQuery.d.ts +2 -0
  21. package/dist/esm/queries/IQuery.d.ts.map +1 -1
  22. package/dist/esm/queries/ObservableQueryFor.d.ts +3 -0
  23. package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
  24. package/dist/esm/queries/ObservableQueryFor.js +13 -23
  25. package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
  26. package/dist/esm/queries/QueryFor.d.ts +3 -0
  27. package/dist/esm/queries/QueryFor.d.ts.map +1 -1
  28. package/dist/esm/queries/QueryFor.js +13 -25
  29. package/dist/esm/queries/QueryFor.js.map +1 -1
  30. package/dist/esm/queries/QueryHttpMethod.d.ts +6 -0
  31. package/dist/esm/queries/QueryHttpMethod.d.ts.map +1 -0
  32. package/dist/esm/queries/QueryHttpMethod.js +21 -0
  33. package/dist/esm/queries/QueryHttpMethod.js.map +1 -0
  34. package/dist/esm/queries/QueryHttpMethodResolver.d.ts +14 -0
  35. package/dist/esm/queries/QueryHttpMethodResolver.d.ts.map +1 -0
  36. package/dist/esm/queries/QueryHttpMethodResolver.js +22 -0
  37. package/dist/esm/queries/QueryHttpMethodResolver.js.map +1 -0
  38. package/dist/esm/queries/QueryHttpRequest.d.ts +21 -0
  39. package/dist/esm/queries/QueryHttpRequest.d.ts.map +1 -0
  40. package/dist/esm/queries/QueryHttpRequest.js +0 -0
  41. package/dist/esm/queries/QueryHttpRequest.js.map +1 -0
  42. package/dist/esm/queries/for_QueryFor/when_performing/with_query_http_method.d.ts +2 -0
  43. package/dist/esm/queries/for_QueryFor/when_performing/with_query_http_method.d.ts.map +1 -0
  44. package/dist/esm/queries/for_QueryFor/when_performing/with_query_http_method.js +51 -0
  45. package/dist/esm/queries/for_QueryFor/when_performing/with_query_http_method.js.map +1 -0
  46. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_get_method.d.ts +2 -0
  47. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_get_method.d.ts.map +1 -0
  48. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_get_method.js +23 -0
  49. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_get_method.js.map +1 -0
  50. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method.d.ts +2 -0
  51. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method.d.ts.map +1 -0
  52. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method.js +28 -0
  53. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method.js.map +1 -0
  54. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method_and_paging_and_sorting.d.ts +2 -0
  55. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method_and_paging_and_sorting.d.ts.map +1 -0
  56. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method_and_paging_and_sorting.js +26 -0
  57. package/dist/esm/queries/for_buildQueryHttpRequest/when_building/with_query_method_and_paging_and_sorting.js.map +1 -0
  58. package/dist/esm/queries/for_executeQueryHttpRequest/options.d.ts +3 -0
  59. package/dist/esm/queries/for_executeQueryHttpRequest/options.d.ts.map +1 -0
  60. package/dist/esm/queries/for_executeQueryHttpRequest/options.js +16 -0
  61. package/dist/esm/queries/for_executeQueryHttpRequest/options.js.map +1 -0
  62. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver.d.ts +2 -0
  63. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver.d.ts.map +1 -0
  64. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver.js +23 -0
  65. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver.js.map +1 -0
  66. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver_and_an_explicit_override.d.ts +2 -0
  67. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver_and_an_explicit_override.d.ts.map +1 -0
  68. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver_and_an_explicit_override.js +23 -0
  69. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver_and_an_explicit_override.js.map +1 -0
  70. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_after_query_was_found_unsupported.d.ts +2 -0
  71. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_after_query_was_found_unsupported.d.ts.map +1 -0
  72. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_after_query_was_found_unsupported.js +21 -0
  73. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_after_query_was_found_unsupported.js.map +1 -0
  74. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_a_network_failure.d.ts +2 -0
  75. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_a_network_failure.d.ts.map +1 -0
  76. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_a_network_failure.js +23 -0
  77. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_a_network_failure.js.map +1 -0
  78. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_aborted_request.d.ts +2 -0
  79. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_aborted_request.d.ts.map +1 -0
  80. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_aborted_request.js +25 -0
  81. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_aborted_request.js.map +1 -0
  82. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_application_error.d.ts +2 -0
  83. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_application_error.d.ts.map +1 -0
  84. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_application_error.js +21 -0
  85. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_application_error.js.map +1 -0
  86. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_multiple_backends.d.ts +2 -0
  87. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_multiple_backends.d.ts.map +1 -0
  88. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_multiple_backends.js +31 -0
  89. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_multiple_backends.js.map +1 -0
  90. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_supported.d.ts +2 -0
  91. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_supported.d.ts.map +1 -0
  92. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_supported.js +19 -0
  93. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_supported.js.map +1 -0
  94. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_unsupported.d.ts +2 -0
  95. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_unsupported.d.ts.map +1 -0
  96. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_unsupported.js +22 -0
  97. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_unsupported.js.map +1 -0
  98. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_get_method.d.ts +2 -0
  99. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_get_method.d.ts.map +1 -0
  100. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_get_method.js +19 -0
  101. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_get_method.js.map +1 -0
  102. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_query_method_and_server_rejecting_the_verb.d.ts +2 -0
  103. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_query_method_and_server_rejecting_the_verb.d.ts.map +1 -0
  104. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_query_method_and_server_rejecting_the_verb.js +19 -0
  105. package/dist/esm/queries/for_executeQueryHttpRequest/when_performing/with_query_method_and_server_rejecting_the_verb.js.map +1 -0
  106. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url.d.ts +2 -0
  107. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url.d.ts.map +1 -0
  108. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url.js +12 -0
  109. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url.js.map +1 -0
  110. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url_and_a_custom_method.d.ts +2 -0
  111. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url_and_a_custom_method.d.ts.map +1 -0
  112. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url_and_a_custom_method.js +12 -0
  113. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url_and_a_custom_method.js.map +1 -0
  114. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_short_url.d.ts +2 -0
  115. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_short_url.d.ts.map +1 -0
  116. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_short_url.js +11 -0
  117. package/dist/esm/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_short_url.js.map +1 -0
  118. package/dist/esm/queries/index.d.ts +3 -0
  119. package/dist/esm/queries/index.d.ts.map +1 -1
  120. package/dist/esm/queries/index.js +3 -0
  121. package/dist/esm/queries/index.js.map +1 -1
  122. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +1 -1
  124. package/queries/IQuery.ts +7 -0
  125. package/queries/ObservableQueryFor.ts +16 -25
  126. package/queries/QueryFor.ts +16 -27
  127. package/queries/QueryHttpMethod.ts +24 -0
  128. package/queries/QueryHttpMethodResolver.ts +51 -0
  129. package/queries/QueryHttpRequest.ts +0 -0
  130. package/queries/for_QueryFor/when_performing/with_query_http_method.ts +63 -0
  131. package/queries/for_buildQueryHttpRequest/when_building/with_get_method.ts +31 -0
  132. package/queries/for_buildQueryHttpRequest/when_building/with_query_method.ts +42 -0
  133. package/queries/for_buildQueryHttpRequest/when_building/with_query_method_and_paging_and_sorting.ts +35 -0
  134. package/queries/for_executeQueryHttpRequest/options.ts +24 -0
  135. package/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver.ts +31 -0
  136. package/queries/for_executeQueryHttpRequest/when_performing/with_a_resolver_and_an_explicit_override.ts +31 -0
  137. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_after_query_was_found_unsupported.ts +33 -0
  138. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_a_network_failure.ts +31 -0
  139. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_aborted_request.ts +31 -0
  140. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_an_application_error.ts +29 -0
  141. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_multiple_backends.ts +43 -0
  142. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_supported.ts +26 -0
  143. package/queries/for_executeQueryHttpRequest/when_performing/with_auto_and_query_unsupported.ts +30 -0
  144. package/queries/for_executeQueryHttpRequest/when_performing/with_get_method.ts +26 -0
  145. package/queries/for_executeQueryHttpRequest/when_performing/with_query_method_and_server_rejecting_the_verb.ts +26 -0
  146. package/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url.ts +17 -0
  147. package/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_long_url_and_a_custom_method.ts +17 -0
  148. package/queries/for_lengthBasedQueryHttpMethod/when_resolving/with_a_short_url.ts +16 -0
  149. package/queries/index.ts +3 -0
@@ -6,6 +6,7 @@ import { Sorting } from './Sorting';
6
6
  import { Paging } from './Paging';
7
7
  import { GetHttpHeaders } from '../GetHttpHeaders';
8
8
  import { ParameterDescriptor } from '../reflection/ParameterDescriptor';
9
+ import { QueryHttpMethod } from './QueryHttpMethod';
9
10
  export declare abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {
10
11
  readonly modelType: Constructor;
11
12
  readonly enumerable: boolean;
@@ -14,6 +15,7 @@ export declare abstract class ObservableQueryFor<TDataType, TParameters = object
14
15
  private _origin;
15
16
  private _connection?;
16
17
  private _httpHeadersCallback;
18
+ private _httpMethod?;
17
19
  abstract readonly route: string;
18
20
  abstract readonly defaultValue: TDataType;
19
21
  readonly roles: string[];
@@ -28,6 +30,7 @@ export declare abstract class ObservableQueryFor<TDataType, TParameters = object
28
30
  setApiBasePath(apiBasePath: string): void;
29
31
  setOrigin(origin: string): void;
30
32
  setHttpHeadersCallback(callback: GetHttpHeaders): void;
33
+ setHttpMethod(method: QueryHttpMethod): void;
31
34
  subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType>;
32
35
  perform(args?: TParameters): Promise<QueryResult<TDataType>>;
33
36
  private validateArguments;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AASxE,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAsBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IArBzE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAwC;IAC5D,OAAO,CAAC,oBAAoB,CAAiB;IAE7C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAOf,YAAqB,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAOxE;IAKD,OAAO,SAEN;IAGD,eAAe,CAAC,YAAY,EAAE,MAAM,QAEnC;IAGD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAExC;IAGD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9B;IAGD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAErD;IAGD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC,CA6CpH;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAuDjE;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
1
+ {"version":3,"file":"ObservableQueryFor.d.ts","sourceRoot":"","sources":["../../../queries/ObservableQueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,8BAAsB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;IAuBhH,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAtBzE,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;IAE9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC9D,QAAQ,KAAK,yBAAyB,IAAI,MAAM,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAOf,YAAqB,SAAS,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAOxE;IAKD,OAAO,SAEN;IAGD,eAAe,CAAC,YAAY,EAAE,MAAM,QAEnC;IAGD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAExC;IAGD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9B;IAGD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAErD;IAGD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE3C;IAGD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,2BAA2B,CAAC,SAAS,CAAC,CA6CpH;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAuCjE;IAED,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;CAW5B"}
@@ -8,9 +8,9 @@ import { Sorting } from './Sorting.js';
8
8
  import { Paging } from './Paging.js';
9
9
  import { SortDirection } from './SortDirection.js';
10
10
  import { Globals } from '../Globals.js';
11
- import { joinPaths } from '../joinPaths.js';
12
11
  import { UrlHelpers } from '../UrlHelpers.js';
13
12
  import { ParametersHelper } from '../reflection/ParametersHelper.js';
13
+ import { executeQueryHttpRequest } from './QueryHttpRequest.js';
14
14
 
15
15
  // Copyright (c) Cratis. All rights reserved.
16
16
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -25,6 +25,7 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
25
25
  _origin;
26
26
  _connection;
27
27
  _httpHeadersCallback;
28
+ _httpMethod;
28
29
  roles = [];
29
30
  /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */ queryName;
30
31
  sorting;
@@ -60,6 +61,9 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
60
61
  /** @inheritdoc */ setHttpHeadersCallback(callback) {
61
62
  this._httpHeadersCallback = callback;
62
63
  }
64
+ /** @inheritdoc */ setHttpMethod(method) {
65
+ this._httpMethod = method;
66
+ }
63
67
  /** @inheritdoc */ subscribe(callback, args) {
64
68
  if (this._connection) {
65
69
  this._connection.disconnect();
@@ -115,28 +119,8 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
115
119
  resolve(noSuccess);
116
120
  });
117
121
  }
118
- const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args);
119
- let actualRoute = joinPaths(this._apiBasePath, route);
120
- const additionalParams = {};
121
- if (this.paging.hasPaging) {
122
- additionalParams.page = this.paging.page;
123
- additionalParams.pageSize = this.paging.pageSize;
124
- }
125
- if (this.sorting.hasSorting) {
126
- additionalParams.sortBy = this.sorting.field;
127
- additionalParams.sortDirection = this.sorting.direction === SortDirection.descending ? 'desc' : 'asc';
128
- }
129
122
  // Collect parameter values from parameterDescriptors that are set
130
123
  const parameterValues = ParametersHelper.collectParameterValues(this);
131
- const queryParams = UrlHelpers.buildQueryParams({
132
- ...unusedParameters,
133
- ...parameterValues
134
- }, additionalParams);
135
- const queryString = queryParams.toString();
136
- if (queryString) {
137
- actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;
138
- }
139
- const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);
140
124
  const headers = {
141
125
  ...this._httpHeadersCallback?.() || {},
142
126
  'Accept': 'application/json',
@@ -145,8 +129,14 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
145
129
  if (this._microservice?.length > 0) {
146
130
  headers[Globals.microserviceHttpHeader] = this._microservice;
147
131
  }
148
- const response = await fetch(url, {
149
- method: 'GET',
132
+ const response = await executeQueryHttpRequest(this._httpMethod, {
133
+ route: this.route,
134
+ apiBasePath: this._apiBasePath,
135
+ origin: this._origin,
136
+ args: args ?? {},
137
+ parameterValues,
138
+ paging: this.paging,
139
+ sorting: this.sorting,
150
140
  headers
151
141
  });
152
142
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // Descriptor-backed instance properties provide defaults; fresh args passed to subscribe()\n // must take precedence over any stale instance property values. Spread parameterValues\n // first so that the caller-supplied args can override them.\n //\n // In direct mode the route arguments are already embedded in the URL path, so only\n // the unused (non-route) parameters are appended as additional query arguments.\n // In multiplexed mode ALL arguments — including route-derived ones — must be included\n // in the subscribe payload so the server can execute the query correctly.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const connectionQueryArguments: any = {\n ...parameterValues,\n ...(Globals.queryDirectMode ? unusedParameters : (args as object) || {}),\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else if (result.data) {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","roles","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","subscribe","args","validateArguments","NullObservableQueryConnection","defaultValue","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","QueryResult","Promise","resolve","actualRoute","joinPaths","additionalParams","hasPaging","page","pageSize","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","queryParams","buildQueryParams","queryString","toString","includes","url","createUrlFrom","headers","length","microserviceHttpHeader","response","fetch","method","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","Array","isArray","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance"],"mappings":"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"}
1
+ {"version":3,"file":"ObservableQueryFor.js","sources":["../../../queries/ObservableQueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IObservableQueryFor, OnNextResult } from './IObservableQueryFor';\nimport { ObservableQuerySubscription } from './ObservableQuerySubscription';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { IObservableQueryConnection } from './IObservableQueryConnection';\nimport { NullObservableQueryConnection } from './NullObservableQueryConnection';\nimport { createObservableQueryConnection } from './ObservableQueryConnectionFactory';\nimport { Constructor } from '@cratis/fundamentals';\nimport { JsonSerializer } from '@cratis/fundamentals';\nimport { QueryResult } from './QueryResult';\nimport { Sorting } from './Sorting';\nimport { Paging } from './Paging';\nimport { SortDirection } from './SortDirection';\nimport { Globals } from '../Globals';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class ObservableQueryFor<TDataType, TParameters = object> implements IObservableQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _connection?: IObservableQueryConnection<TDataType>;\n private _httpHeadersCallback: GetHttpHeaders;\n private _httpMethod?: QueryHttpMethod;\n\n abstract readonly route: string;\n abstract readonly defaultValue: TDataType;\n readonly roles: string[] = [];\n /** Backend fully-qualified query name used when subscribing via the SSE hub. Overridden in generated proxies. */\n readonly queryName?: string;\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n sorting: Sorting;\n paging: Paging;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /**\n * Disposes the query.\n */\n dispose() {\n this._connection?.disconnect();\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\n }\n\n /** @inheritdoc */\n subscribe(callback: OnNextResult<QueryResult<TDataType>>, args?: TParameters): ObservableQuerySubscription<TDataType> {\n if (this._connection) {\n this._connection.disconnect();\n }\n\n if (!this.validateArguments(args)) {\n this._connection = new NullObservableQueryConnection(this.defaultValue);\n } else {\n this._connection = createObservableQueryConnection({\n route: this.route,\n queryName: this.queryName ?? this.constructor.name,\n origin: this._origin,\n apiBasePath: this._apiBasePath,\n microservice: this._microservice,\n args: args as object,\n });\n }\n\n // Descriptor-backed instance properties provide defaults; fresh args passed to subscribe()\n // must take precedence over any stale instance property values. Spread parameterValues\n // first so that the caller-supplied args can override them.\n //\n // In direct mode the route arguments are already embedded in the URL path, so only\n // the unused (non-route) parameters are appended as additional query arguments.\n // In multiplexed mode ALL arguments — including route-derived ones — must be included\n // in the subscribe payload so the server can execute the query correctly.\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const { unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n const connectionQueryArguments: any = {\n ...parameterValues,\n ...(Globals.queryDirectMode ? unusedParameters : (args as object) || {}),\n ...this.buildQueryArguments()\n };\n\n const subscriber = new ObservableQuerySubscription(this._connection);\n this._connection.connect(data => {\n const result: any = data;\n try {\n this.deserializeResult(result);\n callback(result);\n } catch (ex) {\n console.log(ex);\n }\n }, connectionQueryArguments);\n return subscriber;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n if (!this.validateArguments(args)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const headers = {\n ...(this._httpHeadersCallback?.() || {}),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\n headers\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n\n private validateArguments(args?: TParameters): boolean {\n const parameterValues = ParametersHelper.collectParameterValues(this);\n const combinedArgs = { ...(args as object || {}), ...parameterValues };\n return ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, combinedArgs as object);\n }\n\n private buildQueryArguments(): any {\n const queryArguments: any = {};\n\n if (this.paging && this.paging.pageSize > 0) {\n queryArguments.pageSize = this.paging.pageSize;\n queryArguments.page = this.paging.page;\n }\n\n if (this.sorting.hasSorting) {\n queryArguments.sortBy = this.sorting.field;\n queryArguments.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n return queryArguments;\n }\n\n private deserializeResult(result: any): void {\n if (this.enumerable) {\n if (Array.isArray(result.data)) {\n result.data = JsonSerializer.deserializeArrayFromInstance(this.modelType, result.data);\n } else {\n result.data = [];\n }\n } else if (result.data) {\n result.data = JsonSerializer.deserializeFromInstance(this.modelType, result.data);\n }\n }\n}\n"],"names":["ObservableQueryFor","_microservice","_apiBasePath","_origin","_connection","_httpHeadersCallback","_httpMethod","roles","queryName","sorting","paging","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","dispose","disconnect","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","subscribe","args","validateArguments","NullObservableQueryConnection","defaultValue","createObservableQueryConnection","route","name","parameterValues","ParametersHelper","collectParameterValues","unusedParameters","UrlHelpers","replaceRouteParameters","connectionQueryArguments","queryDirectMode","buildQueryArguments","subscriber","ObservableQuerySubscription","connect","data","result","deserializeResult","ex","console","log","perform","noSuccess","QueryResult","Promise","resolve","headers","length","microserviceHttpHeader","response","executeQueryHttpRequest","json","combinedArgs","ValidateRequestArguments","requiredRequestParameters","queryArguments","pageSize","page","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","Array","isArray","JsonSerializer","deserializeArrayFromInstance","deserializeFromInstance"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { Paging } from './Paging';
6
6
  import { Sorting } from './Sorting';
7
7
  import { GetHttpHeaders } from '../GetHttpHeaders';
8
8
  import { ParameterDescriptor } from '../reflection/ParameterDescriptor';
9
+ import { QueryHttpMethod } from './QueryHttpMethod';
9
10
  export declare abstract class QueryFor<TDataType, TParameters = object> implements IQueryFor<TDataType, TParameters> {
10
11
  readonly modelType: Constructor;
11
12
  readonly enumerable: boolean;
@@ -13,6 +14,7 @@ export declare abstract class QueryFor<TDataType, TParameters = object> implemen
13
14
  private _apiBasePath;
14
15
  private _origin;
15
16
  private _httpHeadersCallback;
17
+ private _httpMethod?;
16
18
  abstract readonly route: string;
17
19
  readonly queryName?: string;
18
20
  readonly validation?: QueryValidator<any>;
@@ -29,6 +31,7 @@ export declare abstract class QueryFor<TDataType, TParameters = object> implemen
29
31
  setApiBasePath(apiBasePath: string): void;
30
32
  setOrigin(origin: string): void;
31
33
  setHttpHeadersCallback(callback: GetHttpHeaders): void;
34
+ setHttpMethod(method: QueryHttpMethod): void;
32
35
  perform(args?: TParameters): Promise<QueryResult<TDataType>>;
33
36
  }
34
37
  //# sourceMappingURL=QueryFor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryFor.d.ts","sourceRoot":"","sources":["../../../queries/QueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAOxE,8BAAsB,QAAQ,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IAyB5F,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAxBzE,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,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;IAGK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CA2FjE;CACJ"}
1
+ {"version":3,"file":"QueryFor.d.ts","sourceRoot":"","sources":["../../../queries/QueryFor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpD,8BAAsB,QAAQ,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAE,YAAW,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IA0B5F,QAAQ,CAAC,SAAS,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAzBzE,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,CA2EjE;CACJ"}
@@ -3,10 +3,8 @@ import { ValidateRequestArguments } from './ValidateRequestArguments.js';
3
3
  import { Paging } from './Paging.js';
4
4
  import { Globals } from '../Globals.js';
5
5
  import { Sorting } from './Sorting.js';
6
- import { SortDirection } from './SortDirection.js';
7
- import { joinPaths } from '../joinPaths.js';
8
- import { UrlHelpers } from '../UrlHelpers.js';
9
6
  import { ParametersHelper } from '../reflection/ParametersHelper.js';
7
+ import { executeQueryHttpRequest } from './QueryHttpRequest.js';
10
8
 
11
9
  // Copyright (c) Cratis. All rights reserved.
12
10
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -20,6 +18,7 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
20
18
  _apiBasePath;
21
19
  _origin;
22
20
  _httpHeadersCallback;
21
+ _httpMethod;
23
22
  /** Backend fully-qualified query name used as cache key. Overridden in generated proxies. */ queryName;
24
23
  /* eslint-disable @typescript-eslint/no-explicit-any */ validation;
25
24
  /* eslint-enable @typescript-eslint/no-explicit-any */ roles = [];
@@ -53,6 +52,9 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
53
52
  /** @inheritdoc */ setHttpHeadersCallback(callback) {
54
53
  this._httpHeadersCallback = callback;
55
54
  }
55
+ /** @inheritdoc */ setHttpMethod(method) {
56
+ this._httpMethod = method;
57
+ }
56
58
  /** @inheritdoc */ async perform(args) {
57
59
  const noSuccess = {
58
60
  ...QueryResult.noSuccess,
@@ -94,28 +96,8 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
94
96
  this.abortController.abort();
95
97
  }
96
98
  this.abortController = new AbortController();
97
- const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args);
98
- let actualRoute = joinPaths(this._apiBasePath, route);
99
- const additionalParams = {};
100
- if (this.paging.hasPaging) {
101
- additionalParams.page = this.paging.page;
102
- additionalParams.pageSize = this.paging.pageSize;
103
- }
104
- if (this.sorting.hasSorting) {
105
- additionalParams.sortBy = this.sorting.field;
106
- additionalParams.sortDirection = this.sorting.direction === SortDirection.descending ? 'desc' : 'asc';
107
- }
108
99
  // Collect parameter values from parameterDescriptors that are set
109
100
  const parameterValues = ParametersHelper.collectParameterValues(this);
110
- const queryParams = UrlHelpers.buildQueryParams({
111
- ...unusedParameters,
112
- ...parameterValues
113
- }, additionalParams);
114
- const queryString = queryParams.toString();
115
- if (queryString) {
116
- actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;
117
- }
118
- const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);
119
101
  const headers = {
120
102
  ...this._httpHeadersCallback?.(),
121
103
  ...{
@@ -126,8 +108,14 @@ import { ParametersHelper } from '../reflection/ParametersHelper.js';
126
108
  if (this._microservice?.length > 0) {
127
109
  headers[Globals.microserviceHttpHeader] = this._microservice;
128
110
  }
129
- const response = await fetch(url, {
130
- method: 'GET',
111
+ const response = await executeQueryHttpRequest(this._httpMethod, {
112
+ route: this.route,
113
+ apiBasePath: this._apiBasePath,
114
+ origin: this._origin,
115
+ args: args ?? {},
116
+ parameterValues,
117
+ paging: this.paging,
118
+ sorting: this.sorting,
131
119
  headers,
132
120
  signal: this.abortController.signal
133
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"QueryFor.js","sources":["../../../queries/QueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IQueryFor } from './IQueryFor';\nimport { QueryResult } from \"./QueryResult\";\nimport { QueryValidator } from './QueryValidator';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging';\nimport { Globals } from '../Globals';\nimport { Sorting } from './Sorting';\nimport { SortDirection } from './SortDirection';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\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 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 async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n args = args || this.parameters;\n\n const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return new QueryResult({\n data: this.defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: clientValidationErrors.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, this.modelType, this.enumerable) as QueryResult<TDataType>;\n }\n\n if (!ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, args as object)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n const { route, unusedParameters } = UrlHelpers.replaceRouteParameters(this.route, args as object);\n let actualRoute = joinPaths(this._apiBasePath, route);\n \n const additionalParams: Record<string, string | number> = {};\n if (this.paging.hasPaging) {\n additionalParams.page = this.paging.page;\n additionalParams.pageSize = this.paging.pageSize;\n }\n\n if (this.sorting.hasSorting) {\n additionalParams.sortBy = this.sorting.field;\n additionalParams.sortDirection = (this.sorting.direction === SortDirection.descending) ? 'desc' : 'asc';\n }\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const queryParams = UrlHelpers.buildQueryParams({ ...unusedParameters, ...parameterValues }, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n \n const url = UrlHelpers.createUrlFrom(this._origin, this._apiBasePath, actualRoute);\n\n const headers = {\n ... this._httpHeadersCallback?.(), ...\n {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: this.abortController.signal\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n}\n"],"names":["QueryFor","_microservice","_apiBasePath","_origin","_httpHeadersCallback","queryName","validation","roles","abortController","sorting","paging","parameters","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","perform","args","noSuccess","QueryResult","data","defaultValue","clientValidationErrors","validate","length","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","map","_","severity","message","members","state","exceptionMessages","exceptionStackTrace","totalItems","totalPages","page","size","ValidateRequestArguments","name","requiredRequestParameters","Promise","resolve","abort","AbortController","route","unusedParameters","UrlHelpers","replaceRouteParameters","actualRoute","joinPaths","additionalParams","hasPaging","pageSize","hasSorting","sortBy","field","sortDirection","direction","SortDirection","descending","parameterValues","ParametersHelper","collectParameterValues","queryParams","buildQueryParams","queryString","toString","includes","url","createUrlFrom","headers","microserviceHttpHeader","response","fetch","method","signal","result","json"],"mappings":"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"}
1
+ {"version":3,"file":"QueryFor.js","sources":["../../../queries/QueryFor.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IQueryFor } from './IQueryFor';\nimport { QueryResult } from \"./QueryResult\";\nimport { QueryValidator } from './QueryValidator';\nimport { ValidateRequestArguments } from './ValidateRequestArguments';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Paging } from './Paging';\nimport { Globals } from '../Globals';\nimport { Sorting } from './Sorting';\nimport { GetHttpHeaders } from '../GetHttpHeaders';\nimport { ParameterDescriptor } from '../reflection/ParameterDescriptor';\nimport { ParametersHelper } from '../reflection/ParametersHelper';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { executeQueryHttpRequest } from './QueryHttpRequest';\n\n/**\n * Represents an implementation of {@link IQueryFor}.\n * @template TDataType Type of data returned by the query.\n */\nexport abstract class QueryFor<TDataType, TParameters = object> implements IQueryFor<TDataType, TParameters> {\n private _microservice: string;\n private _apiBasePath: string;\n private _origin: string;\n private _httpHeadersCallback: GetHttpHeaders;\n private _httpMethod?: QueryHttpMethod;\n abstract readonly route: string;\n /** Backend fully-qualified query name used as cache key. Overridden in generated proxies. */\n readonly queryName?: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n readonly validation?: QueryValidator<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n readonly roles: string[] = [];\n abstract readonly parameterDescriptors: ParameterDescriptor[];\n abstract get requiredRequestParameters(): string[];\n abstract defaultValue: TDataType;\n abortController?: AbortController;\n sorting: Sorting;\n paging: Paging;\n parameters: TParameters | undefined;\n\n /**\n * Initializes a new instance of the {@link ObservableQueryFor<,>}} class.\n * @param modelType Type of model, if an enumerable, this is the instance type.\n * @param enumerable Whether or not it is an enumerable.\n */\n constructor(readonly modelType: Constructor, readonly enumerable: boolean) {\n this.sorting = Sorting.none;\n this.paging = Paging.noPaging;\n this._microservice = Globals.microservice ?? '';\n this._apiBasePath = Globals.apiBasePath ?? '';\n this._origin = Globals.origin ?? '';\n this._httpHeadersCallback = () => ({});\n }\n\n /** @inheritdoc */\n setMicroservice(microservice: string) {\n this._microservice = microservice;\n }\n\n /** @inheritdoc */\n setApiBasePath(apiBasePath: string): void {\n this._apiBasePath = apiBasePath;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this._origin = origin;\n }\n\n /** @inheritdoc */\n setHttpHeadersCallback(callback: GetHttpHeaders): void {\n this._httpHeadersCallback = callback;\n }\n\n /** @inheritdoc */\n setHttpMethod(method: QueryHttpMethod): void {\n this._httpMethod = method;\n }\n\n /** @inheritdoc */\n async perform(args?: TParameters): Promise<QueryResult<TDataType>> {\n const noSuccess = { ...QueryResult.noSuccess, ...{ data: this.defaultValue } } as QueryResult<TDataType>;\n\n args = args || this.parameters;\n\n const clientValidationErrors = this.validation?.validate(args as object || {}) || [];\n if (clientValidationErrors.length > 0) {\n return new QueryResult({\n data: this.defaultValue as object,\n isSuccess: false,\n isAuthorized: true,\n isValid: false,\n hasExceptions: false,\n validationResults: clientValidationErrors.map(_ => ({\n severity: _.severity,\n message: _.message,\n members: _.members,\n state: _.state\n })),\n exceptionMessages: [],\n exceptionStackTrace: '',\n paging: {\n totalItems: 0,\n totalPages: 0,\n page: 0,\n size: 0\n }\n }, this.modelType, this.enumerable) as QueryResult<TDataType>;\n }\n\n if (!ValidateRequestArguments(this.constructor.name, this.requiredRequestParameters, args as object)) {\n return new Promise<QueryResult<TDataType>>((resolve) => {\n resolve(noSuccess);\n });\n }\n\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n // Collect parameter values from parameterDescriptors that are set\n const parameterValues = ParametersHelper.collectParameterValues(this);\n\n const headers = {\n ... this._httpHeadersCallback?.(), ...\n {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n\n if (this._microservice?.length > 0) {\n headers[Globals.microserviceHttpHeader] = this._microservice;\n }\n\n const response = await executeQueryHttpRequest(this._httpMethod, {\n route: this.route,\n apiBasePath: this._apiBasePath,\n origin: this._origin,\n args: (args as object) ?? {},\n parameterValues,\n paging: this.paging,\n sorting: this.sorting,\n headers,\n signal: this.abortController.signal\n });\n\n try {\n const result = await response.json();\n return new QueryResult(result, this.modelType, this.enumerable);\n } catch {\n return noSuccess;\n }\n }\n}\n"],"names":["QueryFor","_microservice","_apiBasePath","_origin","_httpHeadersCallback","_httpMethod","queryName","validation","roles","abortController","sorting","paging","parameters","enumerable","modelType","Sorting","none","Paging","noPaging","Globals","microservice","apiBasePath","origin","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","callback","setHttpMethod","method","perform","args","noSuccess","QueryResult","data","defaultValue","clientValidationErrors","validate","length","isSuccess","isAuthorized","isValid","hasExceptions","validationResults","map","_","severity","message","members","state","exceptionMessages","exceptionStackTrace","totalItems","totalPages","page","size","ValidateRequestArguments","name","requiredRequestParameters","Promise","resolve","abort","AbortController","parameterValues","ParametersHelper","collectParameterValues","headers","microserviceHttpHeader","response","executeQueryHttpRequest","route","signal","result","json"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare enum QueryHttpMethod {
2
+ Get = "GET",
3
+ Query = "QUERY",
4
+ Auto = "AUTO"
5
+ }
6
+ //# sourceMappingURL=QueryHttpMethod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpMethod.d.ts","sourceRoot":"","sources":["../../../queries/QueryHttpMethod.ts"],"names":[],"mappings":"AAMA,oBAAY,eAAe;IAIvB,GAAG,QAAQ;IAKX,KAAK,UAAU;IAOf,IAAI,SAAS;CAChB"}
@@ -0,0 +1,21 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * Defines the HTTP method used to perform a query over HTTP.
5
+ */ var QueryHttpMethod = /*#__PURE__*/ function(QueryHttpMethod) {
6
+ /**
7
+ * Use the GET method, carrying arguments in the URL query string (default).
8
+ */ QueryHttpMethod["Get"] = "GET";
9
+ /**
10
+ * Use the QUERY method (RFC 10008), carrying arguments in a JSON request body.
11
+ */ QueryHttpMethod["Query"] = "QUERY";
12
+ /**
13
+ * Prefer the QUERY method and automatically fall back to GET when the server or network path
14
+ * does not support it. The outcome is remembered for the rest of the session so subsequent
15
+ * queries go straight to the working transport.
16
+ */ QueryHttpMethod["Auto"] = "AUTO";
17
+ return QueryHttpMethod;
18
+ }({});
19
+
20
+ export { QueryHttpMethod };
21
+ //# sourceMappingURL=QueryHttpMethod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpMethod.js","sources":["../../../queries/QueryHttpMethod.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\n/**\n * Defines the HTTP method used to perform a query over HTTP.\n */\nexport enum QueryHttpMethod {\n /**\n * Use the GET method, carrying arguments in the URL query string (default).\n */\n Get = 'GET',\n\n /**\n * Use the QUERY method (RFC 10008), carrying arguments in a JSON request body.\n */\n Query = 'QUERY',\n\n /**\n * Prefer the QUERY method and automatically fall back to GET when the server or network path\n * does not support it. The outcome is remembered for the rest of the session so subsequent\n * queries go straight to the working transport.\n */\n Auto = 'AUTO',\n}\n"],"names":["QueryHttpMethod"],"mappings":"AAAA;AACA;AAEA;;IAGO,IAAKA,eAAAA,iBAAAA,SAAAA,eAAAA,EAAAA;AACR;;AAEC,QAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAA;AAGD;;AAEC,QAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAA;AAGD;;;;AAIC,QAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAA;AAfOA,IAAAA,OAAAA,eAAAA;AAiBX,CAAA,CAAA,EAAA;;;;"}
@@ -0,0 +1,14 @@
1
+ import { QueryHttpMethod } from './QueryHttpMethod';
2
+ export interface QueryHttpMethodResolverContext {
3
+ readonly url: URL;
4
+ readonly route: string;
5
+ readonly args: object;
6
+ }
7
+ export type QueryHttpMethodResolver = (context: QueryHttpMethodResolverContext) => QueryHttpMethod;
8
+ export declare const defaultQueryHttpMethodUrlThreshold = 2000;
9
+ export interface LengthBasedQueryHttpMethodOptions {
10
+ threshold?: number;
11
+ whenLong?: QueryHttpMethod;
12
+ }
13
+ export declare function lengthBasedQueryHttpMethod(options?: LengthBasedQueryHttpMethodOptions): QueryHttpMethodResolver;
14
+ //# sourceMappingURL=QueryHttpMethodResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpMethodResolver.d.ts","sourceRoot":"","sources":["../../../queries/QueryHttpMethodResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,MAAM,WAAW,8BAA8B;IAE3C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAElB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAMD,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,8BAA8B,KAAK,eAAe,CAAC;AAMnG,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAKvD,MAAM,WAAW,iCAAiC;IAE9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC9B;AASD,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,iCAAiC,GAAG,uBAAuB,CAI/G"}
@@ -0,0 +1,22 @@
1
+ import { QueryHttpMethod } from './QueryHttpMethod.js';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /**
6
+ * The default URL length, in characters, above which {@link lengthBasedQueryHttpMethod} prefers QUERY.
7
+ * 2000 is the widely-safe URL length across browsers, servers and proxies.
8
+ */ const defaultQueryHttpMethodUrlThreshold = 2000;
9
+ /**
10
+ * Creates a {@link QueryHttpMethodResolver} that keeps short queries on GET and prefers QUERY only when
11
+ * the GET URL would exceed a threshold — targeting the arguments-too-large-for-a-URL case while leaving
12
+ * small, cacheable queries on GET.
13
+ * @param options Optional {@link LengthBasedQueryHttpMethodOptions}.
14
+ * @returns A {@link QueryHttpMethodResolver}.
15
+ */ function lengthBasedQueryHttpMethod(options) {
16
+ const threshold = options?.threshold ?? defaultQueryHttpMethodUrlThreshold;
17
+ const whenLong = options?.whenLong ?? QueryHttpMethod.Auto;
18
+ return (context)=>context.url.href.length > threshold ? whenLong : QueryHttpMethod.Get;
19
+ }
20
+
21
+ export { defaultQueryHttpMethodUrlThreshold, lengthBasedQueryHttpMethod };
22
+ //# sourceMappingURL=QueryHttpMethodResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpMethodResolver.js","sources":["../../../queries/QueryHttpMethodResolver.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 { QueryHttpMethod } from './QueryHttpMethod';\n\n/**\n * The information a {@link QueryHttpMethodResolver} uses to decide the HTTP method for a query.\n */\nexport interface QueryHttpMethodResolverContext {\n /** The URL the query would use as a GET request (arguments in the query string). */\n readonly url: URL;\n /** The route template for the query. */\n readonly route: string;\n /** The arguments for the query. */\n readonly args: object;\n}\n\n/**\n * A policy that decides, per query, which {@link QueryHttpMethod} to use.\n * Consulted only when the query has no explicit method set via {@code setHttpMethod}.\n */\nexport type QueryHttpMethodResolver = (context: QueryHttpMethodResolverContext) => QueryHttpMethod;\n\n/**\n * The default URL length, in characters, above which {@link lengthBasedQueryHttpMethod} prefers QUERY.\n * 2000 is the widely-safe URL length across browsers, servers and proxies.\n */\nexport const defaultQueryHttpMethodUrlThreshold = 2000;\n\n/**\n * Options for {@link lengthBasedQueryHttpMethod}.\n */\nexport interface LengthBasedQueryHttpMethodOptions {\n /** URL length (in characters) above which QUERY is preferred. Defaults to {@link defaultQueryHttpMethodUrlThreshold}. */\n threshold?: number;\n /** The method to use when the URL exceeds the threshold. Defaults to {@link QueryHttpMethod.Auto} so it still falls back to GET. */\n whenLong?: QueryHttpMethod;\n}\n\n/**\n * Creates a {@link QueryHttpMethodResolver} that keeps short queries on GET and prefers QUERY only when\n * the GET URL would exceed a threshold — targeting the arguments-too-large-for-a-URL case while leaving\n * small, cacheable queries on GET.\n * @param options Optional {@link LengthBasedQueryHttpMethodOptions}.\n * @returns A {@link QueryHttpMethodResolver}.\n */\nexport function lengthBasedQueryHttpMethod(options?: LengthBasedQueryHttpMethodOptions): QueryHttpMethodResolver {\n const threshold = options?.threshold ?? defaultQueryHttpMethodUrlThreshold;\n const whenLong = options?.whenLong ?? QueryHttpMethod.Auto;\n return context => (context.url.href.length > threshold ? whenLong : QueryHttpMethod.Get);\n}\n"],"names":["defaultQueryHttpMethodUrlThreshold","lengthBasedQueryHttpMethod","options","threshold","whenLong","QueryHttpMethod","Auto","context","url","href","length","Get"],"mappings":";;AAAA;AACA;AAsBA;;;IAIO,MAAMA,kCAAAA,GAAqC;AAYlD;;;;;;IAOO,SAASC,0BAAAA,CAA2BC,OAA2C,EAAA;IAClF,MAAMC,SAAAA,GAAYD,SAASC,SAAAA,IAAaH,kCAAAA;AACxC,IAAA,MAAMI,QAAAA,GAAWF,OAAAA,EAASE,QAAAA,IAAYC,eAAAA,CAAgBC,IAAI;AAC1D,IAAA,OAAOC,CAAAA,OAAAA,GAAYA,OAAAA,CAAQC,GAAG,CAACC,IAAI,CAACC,MAAM,GAAGP,SAAAA,GAAYC,QAAAA,GAAWC,eAAAA,CAAgBM,GAAG;AAC3F;;;;"}
@@ -0,0 +1,21 @@
1
+ import { Paging } from './Paging';
2
+ import { Sorting } from './Sorting';
3
+ import { QueryHttpMethod } from './QueryHttpMethod';
4
+ export interface BuildQueryHttpRequestOptions {
5
+ route: string;
6
+ apiBasePath: string;
7
+ origin: string;
8
+ args: object;
9
+ parameterValues: object;
10
+ paging: Paging;
11
+ sorting: Sorting;
12
+ headers: HeadersInit;
13
+ signal?: AbortSignal;
14
+ }
15
+ export declare function buildQueryHttpRequest(method: QueryHttpMethod, options: BuildQueryHttpRequestOptions): {
16
+ url: URL;
17
+ init: RequestInit;
18
+ };
19
+ export declare function resetQueryHttpMethodResolution(): void;
20
+ export declare function executeQueryHttpRequest(override: QueryHttpMethod | undefined, options: BuildQueryHttpRequestOptions): Promise<Response>;
21
+ //# sourceMappingURL=QueryHttpRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpRequest.d.ts","sourceRoot":"","sources":["../../../queries/QueryHttpRequest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQpD,MAAM,WAAW,4BAA4B;IAEzC,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;IAEb,eAAe,EAAE,MAAM,CAAC;IAExB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,EAAE,WAAW,CAAC;IAErB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAsBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,4BAA4B,GAAG;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAsDrI;AAkBD,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AA2BD,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6C7I"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryHttpRequest.js","sources":["../../../queries/QueryHttpRequest.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 { Paging } from './Paging';\nimport { Sorting } from './Sorting';\nimport { SortDirection } from './SortDirection';\nimport { QueryHttpMethod } from './QueryHttpMethod';\nimport { joinPaths } from '../joinPaths';\nimport { UrlHelpers } from '../UrlHelpers';\nimport { Globals } from '../Globals';\n\n/**\n * Options for building an HTTP request for a query.\n */\nexport interface BuildQueryHttpRequestOptions {\n /** The route template for the query, possibly containing route parameters. */\n route: string;\n /** The base path for the API. */\n apiBasePath: string;\n /** The origin for the API. */\n origin: string;\n /** The arguments used for route-parameter substitution and as query arguments. */\n args: object;\n /** Descriptor-collected parameter values that also form query arguments. */\n parameterValues: object;\n /** The paging for the query. */\n paging: Paging;\n /** The sorting for the query. */\n sorting: Sorting;\n /** The HTTP headers to include. */\n headers: HeadersInit;\n /** Optional abort signal for the request. */\n signal?: AbortSignal;\n}\n\ninterface QueryRequestPayload {\n arguments: object;\n paging?: { page: number; pageSize: number };\n sorting?: { field: string; direction: string };\n}\n\nfunction directionToString(sorting: Sorting): string {\n return sorting.direction === SortDirection.descending ? 'desc' : 'asc';\n}\n\n/**\n * Builds the URL and {@link RequestInit} for performing a query with the given HTTP method.\n *\n * For {@link QueryHttpMethod.Get}, arguments, paging and sorting are placed in the URL query string.\n * For {@link QueryHttpMethod.Query}, route parameters remain in the path while the arguments, paging\n * and sorting are carried in a JSON body envelope.\n * @param method The {@link QueryHttpMethod} to use.\n * @param options The {@link BuildQueryHttpRequestOptions} describing the request.\n * @returns The URL and {@link RequestInit} to pass to {@link fetch}.\n */\nexport function buildQueryHttpRequest(method: QueryHttpMethod, options: BuildQueryHttpRequestOptions): { url: URL; init: RequestInit } {\n const { route, apiBasePath, origin, args, parameterValues, paging, sorting, headers, signal } = options;\n\n const { route: replacedRoute, unusedParameters } = UrlHelpers.replaceRouteParameters(route, args);\n const argumentValues = { ...unusedParameters, ...parameterValues };\n let actualRoute = joinPaths(apiBasePath, replacedRoute);\n\n if (method === QueryHttpMethod.Query) {\n const url = UrlHelpers.createUrlFrom(origin, apiBasePath, actualRoute);\n const payload: QueryRequestPayload = { arguments: argumentValues };\n if (paging.hasPaging) {\n payload.paging = { page: paging.page, pageSize: paging.pageSize };\n }\n if (sorting.hasSorting) {\n payload.sorting = { field: sorting.field, direction: directionToString(sorting) };\n }\n\n const requestHeaders = new Headers(headers);\n if (!requestHeaders.has('Content-Type')) {\n requestHeaders.set('Content-Type', 'application/json');\n }\n\n const init: RequestInit = {\n method: QueryHttpMethod.Query,\n headers: requestHeaders,\n body: JSON.stringify(payload),\n signal\n };\n return { url, init };\n }\n\n const additionalParams: Record<string, string | number> = {};\n if (paging.hasPaging) {\n additionalParams.page = paging.page;\n additionalParams.pageSize = paging.pageSize;\n }\n if (sorting.hasSorting) {\n additionalParams.sortBy = sorting.field;\n additionalParams.sortDirection = directionToString(sorting);\n }\n\n const queryParams = UrlHelpers.buildQueryParams(argumentValues, additionalParams);\n const queryString = queryParams.toString();\n if (queryString) {\n actualRoute += (actualRoute.includes('?') ? '&' : '?') + queryString;\n }\n\n const url = UrlHelpers.createUrlFrom(origin, apiBasePath, actualRoute);\n const init: RequestInit = {\n method: QueryHttpMethod.Get,\n headers,\n signal\n };\n return { url, init };\n}\n\n/**\n * The transport learned for {@link QueryHttpMethod.Auto}, keyed by backend (origin + API base path).\n * Once QUERY is found to be unsupported for a backend it is pinned to GET for the rest of the session;\n * while QUERY works the backend stays absent so each attempt keeps verifying cheaply. Keying by backend\n * means one backend rejecting QUERY does not downgrade queries to other backends.\n */\nconst autoResolvedMethods = new Map<string, QueryHttpMethod>();\n\nfunction backendKey(options: BuildQueryHttpRequestOptions): string {\n return `${options.origin}\u0000${options.apiBasePath}`;\n}\n\n/**\n * Resets the transport learned for {@link QueryHttpMethod.Auto} for every backend, so the next Auto\n * query re-probes for QUERY support. Useful after a network change, or between tests.\n */\nexport function resetQueryHttpMethodResolution(): void {\n autoResolvedMethods.clear();\n}\n\nfunction isMethodUnsupported(status: number): boolean {\n // 405 Method Not Allowed / 501 Not Implemented — the server received the request but will not\n // handle the verb (e.g. QUERY disabled). A missing intermediary surfaces as a thrown TypeError.\n return status === 405 || status === 501;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return (error as { name?: string })?.name === 'AbortError';\n}\n\n/**\n * Performs the query HTTP request for the given method, resolving {@link QueryHttpMethod.Auto} by\n * preferring QUERY and falling back to GET when the server or network path does not support it.\n *\n * Explicit {@link QueryHttpMethod.Get} and {@link QueryHttpMethod.Query} are honored exactly, with no\n * fallback. For Auto, a transport-level failure — a `405`/`501` response, or a network/CORS error from\n * {@link fetch} — falls back to GET and pins the session to GET. Application-level errors (any other\n * status, returned as a normal {@link Response}) are never treated as a fallback signal.\n *\n * The method is resolved in order of precedence: an explicit per-query {@code override}, then\n * {@link Globals.queryHttpMethodResolver} (given the built GET URL), then {@link Globals.queryHttpMethod}.\n * @param override The explicit per-query {@link QueryHttpMethod}, or `undefined` to resolve from globals.\n * @param options The {@link BuildQueryHttpRequestOptions} describing the request.\n * @returns The {@link Response} from the request that was ultimately sent.\n */\nexport async function executeQueryHttpRequest(override: QueryHttpMethod | undefined, options: BuildQueryHttpRequestOptions): Promise<Response> {\n // The GET request is built up front when a resolver needs the URL, and reused if GET is chosen.\n let getRequest: { url: URL; init: RequestInit } | undefined;\n let method: QueryHttpMethod;\n if (override !== undefined) {\n method = override;\n } else if (Globals.queryHttpMethodResolver) {\n getRequest = buildQueryHttpRequest(QueryHttpMethod.Get, options);\n method = Globals.queryHttpMethodResolver({ url: getRequest.url, route: options.route, args: options.args });\n } else {\n method = Globals.queryHttpMethod;\n }\n\n const send = (httpMethod: QueryHttpMethod): Promise<Response> => {\n if (httpMethod === QueryHttpMethod.Get && getRequest) {\n return fetch(getRequest.url, getRequest.init);\n }\n const { url, init } = buildQueryHttpRequest(httpMethod, options);\n return fetch(url, init);\n };\n\n if (method !== QueryHttpMethod.Auto) {\n return send(method);\n }\n\n const key = backendKey(options);\n if (autoResolvedMethods.get(key) === QueryHttpMethod.Get) {\n return send(QueryHttpMethod.Get);\n }\n\n try {\n const response = await send(QueryHttpMethod.Query);\n if (isMethodUnsupported(response.status)) {\n autoResolvedMethods.set(key, QueryHttpMethod.Get);\n return send(QueryHttpMethod.Get);\n }\n autoResolvedMethods.set(key, QueryHttpMethod.Query);\n return response;\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n autoResolvedMethods.set(key, QueryHttpMethod.Get);\n return send(QueryHttpMethod.Get);\n }\n}\n"],"names":["directionToString","sorting","direction","SortDirection","descending","buildQueryHttpRequest","method","options","route","apiBasePath","origin","args","parameterValues","paging","headers","signal","replacedRoute","unusedParameters","UrlHelpers","replaceRouteParameters","argumentValues","actualRoute","joinPaths","QueryHttpMethod","Query","url","createUrlFrom","payload","arguments","hasPaging","page","pageSize","hasSorting","field","requestHeaders","Headers","has","set","init","body","JSON","stringify","additionalParams","sortBy","sortDirection","queryParams","buildQueryParams","queryString","toString","includes","Get","autoResolvedMethods","Map","backendKey","resetQueryHttpMethodResolution","clear","isMethodUnsupported","status","isAbortError","error","name","executeQueryHttpRequest","override","getRequest","undefined","Globals","queryHttpMethodResolver","queryHttpMethod","send","httpMethod","fetch","Auto","key","get","response"],"mappings":";;;;;;AAAA;AACA;AAwCA,SAASA,kBAAkBC,OAAgB,EAAA;AACvC,IAAA,OAAOA,QAAQC,SAAS,KAAKC,aAAAA,CAAcC,UAAU,GAAG,MAAA,GAAS,KAAA;AACrE;AAEA;;;;;;;;;AASC,IACM,SAASC,qBAAAA,CAAsBC,MAAuB,EAAEC,OAAqC,EAAA;AAChG,IAAA,MAAM,EAAEC,KAAK,EAAEC,WAAW,EAAEC,MAAM,EAAEC,IAAI,EAAEC,eAAe,EAAEC,MAAM,EAAEZ,OAAO,EAAEa,OAAO,EAAEC,MAAM,EAAE,GAAGR,OAAAA;IAEhG,MAAM,EAAEC,KAAAA,EAAOQ,aAAa,EAAEC,gBAAgB,EAAE,GAAGC,UAAAA,CAAWC,sBAAsB,CAACX,KAAAA,EAAOG,IAAAA,CAAAA;AAC5F,IAAA,MAAMS,cAAAA,GAAiB;AAAE,QAAA,GAAGH,gBAAgB;AAAE,QAAA,GAAGL;AAAgB,KAAA;IACjE,IAAIS,WAAAA,GAAcC,UAAUb,WAAAA,EAAaO,aAAAA,CAAAA;IAEzC,IAAIV,MAAAA,KAAWiB,eAAAA,CAAgBC,KAAK,EAAE;AAClC,QAAA,MAAMC,GAAAA,GAAMP,UAAAA,CAAWQ,aAAa,CAAChB,QAAQD,WAAAA,EAAaY,WAAAA,CAAAA;AAC1D,QAAA,MAAMM,OAAAA,GAA+B;YAAEC,SAAAA,EAAWR;AAAe,SAAA;QACjE,IAAIP,MAAAA,CAAOgB,SAAS,EAAE;AAClBF,YAAAA,OAAAA,CAAQd,MAAM,GAAG;AAAEiB,gBAAAA,IAAAA,EAAMjB,OAAOiB,IAAI;AAAEC,gBAAAA,QAAAA,EAAUlB,OAAOkB;AAAS,aAAA;AACpE,QAAA;QACA,IAAI9B,OAAAA,CAAQ+B,UAAU,EAAE;AACpBL,YAAAA,OAAAA,CAAQ1B,OAAO,GAAG;AAAEgC,gBAAAA,KAAAA,EAAOhC,QAAQgC,KAAK;AAAE/B,gBAAAA,SAAAA,EAAWF,iBAAAA,CAAkBC,OAAAA;AAAS,aAAA;AACpF,QAAA;QAEA,MAAMiC,cAAAA,GAAiB,IAAIC,OAAAA,CAAQrB,OAAAA,CAAAA;AACnC,QAAA,IAAI,CAACoB,cAAAA,CAAeE,GAAG,CAAC,cAAA,CAAA,EAAiB;YACrCF,cAAAA,CAAeG,GAAG,CAAC,cAAA,EAAgB,kBAAA,CAAA;AACvC,QAAA;AAEA,QAAA,MAAMC,IAAAA,GAAoB;AACtBhC,YAAAA,MAAAA,EAAQiB,gBAAgBC,KAAK;YAC7BV,OAAAA,EAASoB,cAAAA;YACTK,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAACd,OAAAA,CAAAA;AACrBZ,YAAAA;AACJ,SAAA;QACA,OAAO;AAAEU,YAAAA,GAAAA;AAAKa,YAAAA;AAAK,SAAA;AACvB,IAAA;AAEA,IAAA,MAAMI,mBAAoD,EAAC;IAC3D,IAAI7B,MAAAA,CAAOgB,SAAS,EAAE;QAClBa,gBAAAA,CAAiBZ,IAAI,GAAGjB,MAAAA,CAAOiB,IAAI;QACnCY,gBAAAA,CAAiBX,QAAQ,GAAGlB,MAAAA,CAAOkB,QAAQ;AAC/C,IAAA;IACA,IAAI9B,OAAAA,CAAQ+B,UAAU,EAAE;QACpBU,gBAAAA,CAAiBC,MAAM,GAAG1C,OAAAA,CAAQgC,KAAK;QACvCS,gBAAAA,CAAiBE,aAAa,GAAG5C,iBAAAA,CAAkBC,OAAAA,CAAAA;AACvD,IAAA;AAEA,IAAA,MAAM4C,WAAAA,GAAc3B,UAAAA,CAAW4B,gBAAgB,CAAC1B,cAAAA,EAAgBsB,gBAAAA,CAAAA;IAChE,MAAMK,WAAAA,GAAcF,YAAYG,QAAQ,EAAA;AACxC,IAAA,IAAID,WAAAA,EAAa;QACb1B,WAAAA,IAAgBA,CAAAA,WAAAA,CAAY4B,QAAQ,CAAC,GAAA,CAAA,GAAO,GAAA,GAAM,GAAE,IAAKF,WAAAA;AAC7D,IAAA;AAEA,IAAA,MAAMtB,GAAAA,GAAMP,UAAAA,CAAWQ,aAAa,CAAChB,QAAQD,WAAAA,EAAaY,WAAAA,CAAAA;AAC1D,IAAA,MAAMiB,IAAAA,GAAoB;AACtBhC,QAAAA,MAAAA,EAAQiB,gBAAgB2B,GAAG;AAC3BpC,QAAAA,OAAAA;AACAC,QAAAA;AACJ,KAAA;IACA,OAAO;AAAEU,QAAAA,GAAAA;AAAKa,QAAAA;AAAK,KAAA;AACvB;AAEA;;;;;IAMA,MAAMa,sBAAsB,IAAIC,GAAAA,EAAAA;AAEhC,SAASC,WAAW9C,OAAqC,EAAA;IACrD,OAAO,CAAA,EAAGA,QAAQG,MAAM,CAAC,CAAC,EAAEH,OAAAA,CAAQE,WAAW,CAAA,CAAE;AACrD;AAEA;;;AAGC,IACM,SAAS6C,8BAAAA,GAAAA;AACZH,IAAAA,mBAAAA,CAAoBI,KAAK,EAAA;AAC7B;AAEA,SAASC,oBAAoBC,MAAc,EAAA;;;IAGvC,OAAOA,MAAAA,KAAW,OAAOA,MAAAA,KAAW,GAAA;AACxC;AAEA,SAASC,aAAaC,KAAc,EAAA;IAChC,OAAQA,OAA6BC,IAAAA,KAAS,YAAA;AAClD;AAEA;;;;;;;;;;;;;;AAcC,IACM,eAAeC,uBAAAA,CAAwBC,QAAqC,EAAEvD,OAAqC,EAAA;;IAEtH,IAAIwD,UAAAA;IACJ,IAAIzD,MAAAA;AACJ,IAAA,IAAIwD,aAAaE,SAAAA,EAAW;QACxB1D,MAAAA,GAASwD,QAAAA;IACb,CAAA,MAAO,IAAIG,OAAAA,CAAQC,uBAAuB,EAAE;QACxCH,UAAAA,GAAa1D,qBAAAA,CAAsBkB,eAAAA,CAAgB2B,GAAG,EAAE3C,OAAAA,CAAAA;QACxDD,MAAAA,GAAS2D,OAAAA,CAAQC,uBAAuB,CAAC;AAAEzC,YAAAA,GAAAA,EAAKsC,WAAWtC,GAAG;AAAEjB,YAAAA,KAAAA,EAAOD,QAAQC,KAAK;AAAEG,YAAAA,IAAAA,EAAMJ,QAAQI;AAAK,SAAA,CAAA;IAC7G,CAAA,MAAO;AACHL,QAAAA,MAAAA,GAAS2D,QAAQE,eAAe;AACpC,IAAA;AAEA,IAAA,MAAMC,OAAO,CAACC,UAAAA,GAAAA;AACV,QAAA,IAAIA,UAAAA,KAAe9C,eAAAA,CAAgB2B,GAAG,IAAIa,UAAAA,EAAY;AAClD,YAAA,OAAOO,KAAAA,CAAMP,UAAAA,CAAWtC,GAAG,EAAEsC,WAAWzB,IAAI,CAAA;AAChD,QAAA;AACA,QAAA,MAAM,EAAEb,GAAG,EAAEa,IAAI,EAAE,GAAGjC,sBAAsBgE,UAAAA,EAAY9D,OAAAA,CAAAA;AACxD,QAAA,OAAO+D,MAAM7C,GAAAA,EAAKa,IAAAA,CAAAA;AACtB,IAAA,CAAA;IAEA,IAAIhC,MAAAA,KAAWiB,eAAAA,CAAgBgD,IAAI,EAAE;AACjC,QAAA,OAAOH,IAAAA,CAAK9D,MAAAA,CAAAA;AAChB,IAAA;AAEA,IAAA,MAAMkE,MAAMnB,UAAAA,CAAW9C,OAAAA,CAAAA;AACvB,IAAA,IAAI4C,oBAAoBsB,GAAG,CAACD,GAAAA,CAAAA,KAASjD,eAAAA,CAAgB2B,GAAG,EAAE;QACtD,OAAOkB,IAAAA,CAAK7C,gBAAgB2B,GAAG,CAAA;AACnC,IAAA;IAEA,IAAI;AACA,QAAA,MAAMwB,QAAAA,GAAW,MAAMN,IAAAA,CAAK7C,eAAAA,CAAgBC,KAAK,CAAA;QACjD,IAAIgC,mBAAAA,CAAoBkB,QAAAA,CAASjB,MAAM,CAAA,EAAG;AACtCN,YAAAA,mBAAAA,CAAoBd,GAAG,CAACmC,GAAAA,EAAKjD,eAAAA,CAAgB2B,GAAG,CAAA;YAChD,OAAOkB,IAAAA,CAAK7C,gBAAgB2B,GAAG,CAAA;AACnC,QAAA;AACAC,QAAAA,mBAAAA,CAAoBd,GAAG,CAACmC,GAAAA,EAAKjD,eAAAA,CAAgBC,KAAK,CAAA;QAClD,OAAOkD,QAAAA;AACX,IAAA,CAAA,CAAE,OAAOf,KAAAA,EAAO;AACZ,QAAA,IAAID,aAAaC,KAAAA,CAAAA,EAAQ;YACrB,MAAMA,KAAAA;AACV,QAAA;AACAR,QAAAA,mBAAAA,CAAoBd,GAAG,CAACmC,GAAAA,EAAKjD,eAAAA,CAAgB2B,GAAG,CAAA;QAChD,OAAOkB,IAAAA,CAAK7C,gBAAgB2B,GAAG,CAAA;AACnC,IAAA;AACJ;;;;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_query_http_method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_query_http_method.d.ts","sourceRoot":"","sources":["../../../../../queries/for_QueryFor/when_performing/with_query_http_method.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { a_query_for } from '../given/a_query_for';
2
+ import { given } from '../../../given';
3
+ import * as sinon from 'sinon';
4
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
5
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
6
+ describe('with query http method', given(a_query_for, context => {
7
+ let result;
8
+ let fetchStub;
9
+ let fetchHelper;
10
+ const mockResponse = {
11
+ data: 'test-result',
12
+ isSuccess: true,
13
+ isAuthorized: true,
14
+ isValid: true,
15
+ hasExceptions: false,
16
+ validationResults: [],
17
+ exceptionMessages: [],
18
+ exceptionStackTrace: '',
19
+ paging: { totalItems: 0, totalPages: 0, page: 0, size: 0 }
20
+ };
21
+ beforeEach(async () => {
22
+ fetchHelper = createFetchHelper();
23
+ fetchStub = fetchHelper.stubFetch();
24
+ fetchStub.resolves({
25
+ json: sinon.stub().resolves(mockResponse),
26
+ ok: true,
27
+ status: 200
28
+ });
29
+ context.query.setOrigin('https://api.example.com');
30
+ context.query.setApiBasePath('/api/v1');
31
+ context.query.setHttpMethod(QueryHttpMethod.Query);
32
+ result = await context.query.perform({ id: 'test-id' });
33
+ });
34
+ afterEach(() => {
35
+ fetchHelper.restore();
36
+ });
37
+ it('should return successful result', () => result.isSuccess.should.be.true);
38
+ it('should call fetch with QUERY method', () => {
39
+ const options = fetchStub.getCall(0).args[1];
40
+ options.method.should.equal('QUERY');
41
+ });
42
+ it('should keep the route parameter in the path', () => {
43
+ const call = fetchStub.getCall(0);
44
+ call.args[0].href.should.equal('https://api.example.com/api/v1/api/test/test-id');
45
+ });
46
+ it('should send a JSON request body', () => {
47
+ const options = fetchStub.getCall(0).args[1];
48
+ (options.body === undefined).should.be.false;
49
+ });
50
+ }));
51
+ //# sourceMappingURL=with_query_http_method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_query_http_method.js","sourceRoot":"","sources":["../../../../../queries/for_QueryFor/when_performing/with_query_http_method.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAQ,CAAC,wBAAwB,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;IAC5D,IAAI,MAA2B,CAAC;IAChC,IAAI,SAA0B,CAAC;IAC/B,IAAI,WAAsE,CAAC;IAC3E,MAAM,YAAY,GAAG;QACjB,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,mBAAmB,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;KAC7D,CAAC;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QAClB,WAAW,GAAG,iBAAiB,EAAE,CAAC;QAClC,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;QACpC,SAAS,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACzC,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;SACS,CAAC,CAAC;QAE1B,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEnD,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,WAAW,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAE7E,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with_get_method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with_get_method.d.ts","sourceRoot":"","sources":["../../../../../queries/for_buildQueryHttpRequest/when_building/with_get_method.ts"],"names":[],"mappings":""}