@cratis/arc 20.55.1 → 20.57.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
@@ -0,0 +1,29 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with auto and an application error', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+ let result: Response;
14
+
15
+ beforeEach(async () => {
16
+ resetQueryHttpMethodResolution();
17
+ fetchHelper = createFetchHelper();
18
+ fetchStub = fetchHelper.stubFetch();
19
+ // 400 is an application-level failure, not a transport signal — it must not trigger a fallback.
20
+ fetchStub.resolves({ status: 400 } as unknown as Response);
21
+ result = await executeQueryHttpRequest(QueryHttpMethod.Auto, makeOptions());
22
+ });
23
+
24
+ afterEach(() => fetchHelper.restore());
25
+
26
+ it('should send a single request', () => fetchStub.callCount.should.equal(1));
27
+ it('should keep using QUERY', () => fetchStub.getCall(0).args[1].method.should.equal('QUERY'));
28
+ it('should return the QUERY response', () => result.status.should.equal(400));
29
+ });
@@ -0,0 +1,43 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with auto and multiple backends', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+ const unsupportedOrigin = 'https://legacy.example.com';
14
+ const supportedOrigin = 'https://modern.example.com';
15
+
16
+ beforeEach(async () => {
17
+ resetQueryHttpMethodResolution();
18
+ fetchHelper = createFetchHelper();
19
+ fetchStub = fetchHelper.stubFetch();
20
+ // The legacy backend rejects QUERY; the modern backend supports it.
21
+ fetchStub.callsFake((url: URL, init: RequestInit) => {
22
+ const rejectsQuery = url.origin === unsupportedOrigin && init.method === 'QUERY';
23
+ return Promise.resolve({ status: rejectsQuery ? 405 : 200 } as unknown as Response);
24
+ });
25
+
26
+ // Probe the legacy backend first — it pins to GET.
27
+ await executeQueryHttpRequest(QueryHttpMethod.Auto, makeOptions({ origin: unsupportedOrigin }));
28
+ // The modern backend should still be probed and settle on QUERY.
29
+ await executeQueryHttpRequest(QueryHttpMethod.Auto, makeOptions({ origin: supportedOrigin }));
30
+ });
31
+
32
+ afterEach(() => fetchHelper.restore());
33
+
34
+ it('should use QUERY for the backend that supports it', () => {
35
+ const modernCalls = fetchStub.getCalls().filter(call => (call.args[0] as URL).origin === supportedOrigin);
36
+ modernCalls.some(call => call.args[1].method === 'QUERY').should.be.true;
37
+ });
38
+
39
+ it('should not downgrade the supported backend to GET', () => {
40
+ const modernCalls = fetchStub.getCalls().filter(call => (call.args[0] as URL).origin === supportedOrigin);
41
+ modernCalls.every(call => call.args[1].method === 'QUERY').should.be.true;
42
+ });
43
+ });
@@ -0,0 +1,26 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with auto and query supported', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+
14
+ beforeEach(async () => {
15
+ resetQueryHttpMethodResolution();
16
+ fetchHelper = createFetchHelper();
17
+ fetchStub = fetchHelper.stubFetch();
18
+ fetchStub.resolves({ status: 200 } as unknown as Response);
19
+ await executeQueryHttpRequest(QueryHttpMethod.Auto, makeOptions());
20
+ });
21
+
22
+ afterEach(() => fetchHelper.restore());
23
+
24
+ it('should send a single request', () => fetchStub.callCount.should.equal(1));
25
+ it('should use the QUERY method', () => fetchStub.getCall(0).args[1].method.should.equal('QUERY'));
26
+ });
@@ -0,0 +1,30 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with auto and query unsupported', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+ let result: Response;
14
+
15
+ beforeEach(async () => {
16
+ resetQueryHttpMethodResolution();
17
+ fetchHelper = createFetchHelper();
18
+ fetchStub = fetchHelper.stubFetch();
19
+ fetchStub.callsFake((_url: URL, init: RequestInit) =>
20
+ Promise.resolve({ status: init.method === 'QUERY' ? 405 : 200 } as unknown as Response));
21
+ result = await executeQueryHttpRequest(QueryHttpMethod.Auto, makeOptions());
22
+ });
23
+
24
+ afterEach(() => fetchHelper.restore());
25
+
26
+ it('should attempt QUERY first', () => fetchStub.getCall(0).args[1].method.should.equal('QUERY'));
27
+ it('should fall back to GET', () => fetchStub.getCall(1).args[1].method.should.equal('GET'));
28
+ it('should send exactly two requests', () => fetchStub.callCount.should.equal(2));
29
+ it('should return the GET response', () => result.status.should.equal(200));
30
+ });
@@ -0,0 +1,26 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with get method', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+
14
+ beforeEach(async () => {
15
+ resetQueryHttpMethodResolution();
16
+ fetchHelper = createFetchHelper();
17
+ fetchStub = fetchHelper.stubFetch();
18
+ fetchStub.resolves({ status: 200 } as unknown as Response);
19
+ await executeQueryHttpRequest(QueryHttpMethod.Get, makeOptions());
20
+ });
21
+
22
+ afterEach(() => fetchHelper.restore());
23
+
24
+ it('should send a single request', () => fetchStub.callCount.should.equal(1));
25
+ it('should use the GET method', () => fetchStub.getCall(0).args[1].method.should.equal('GET'));
26
+ });
@@ -0,0 +1,26 @@
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
+ import * as sinon from 'sinon';
5
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
6
+ import { executeQueryHttpRequest, resetQueryHttpMethodResolution } from '../../QueryHttpRequest';
7
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
8
+ import { makeOptions } from '../options';
9
+
10
+ describe('when performing with query method and server rejecting the verb', () => {
11
+ let fetchStub: sinon.SinonStub;
12
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
13
+
14
+ beforeEach(async () => {
15
+ resetQueryHttpMethodResolution();
16
+ fetchHelper = createFetchHelper();
17
+ fetchStub = fetchHelper.stubFetch();
18
+ fetchStub.resolves({ status: 405 } as unknown as Response);
19
+ await executeQueryHttpRequest(QueryHttpMethod.Query, makeOptions());
20
+ });
21
+
22
+ afterEach(() => fetchHelper.restore());
23
+
24
+ it('should send a single request', () => fetchStub.callCount.should.equal(1));
25
+ it('should not fall back when the method was chosen explicitly', () => fetchStub.getCall(0).args[1].method.should.equal('QUERY'));
26
+ });
@@ -0,0 +1,17 @@
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
+ import { lengthBasedQueryHttpMethod } from '../../QueryHttpMethodResolver';
5
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
6
+
7
+ describe('when resolving with a long url', () => {
8
+ let result: QueryHttpMethod;
9
+
10
+ beforeEach(() => {
11
+ const resolve = lengthBasedQueryHttpMethod({ threshold: 100 });
12
+ const longValue = 'x'.repeat(500);
13
+ result = resolve({ url: new URL(`https://api.example.com/api/test?search=${longValue}`), route: '/api/test', args: {} });
14
+ });
15
+
16
+ it('should prefer QUERY with fallback', () => result.should.equal(QueryHttpMethod.Auto));
17
+ });
@@ -0,0 +1,17 @@
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
+ import { lengthBasedQueryHttpMethod } from '../../QueryHttpMethodResolver';
5
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
6
+
7
+ describe('when resolving with a long url and a custom method', () => {
8
+ let result: QueryHttpMethod;
9
+
10
+ beforeEach(() => {
11
+ const resolve = lengthBasedQueryHttpMethod({ threshold: 100, whenLong: QueryHttpMethod.Query });
12
+ const longValue = 'x'.repeat(500);
13
+ result = resolve({ url: new URL(`https://api.example.com/api/test?search=${longValue}`), route: '/api/test', args: {} });
14
+ });
15
+
16
+ it('should use the configured method', () => result.should.equal(QueryHttpMethod.Query));
17
+ });
@@ -0,0 +1,16 @@
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
+ import { lengthBasedQueryHttpMethod } from '../../QueryHttpMethodResolver';
5
+ import { QueryHttpMethod } from '../../QueryHttpMethod';
6
+
7
+ describe('when resolving with a short url', () => {
8
+ let result: QueryHttpMethod;
9
+
10
+ beforeEach(() => {
11
+ const resolve = lengthBasedQueryHttpMethod({ threshold: 100 });
12
+ result = resolve({ url: new URL('https://api.example.com/api/test?id=1'), route: '/api/test', args: {} });
13
+ });
14
+
15
+ it('should choose GET', () => result.should.equal(QueryHttpMethod.Get));
16
+ });
package/queries/index.ts CHANGED
@@ -12,6 +12,9 @@ export * from './SortingActions';
12
12
  export * from './SortingActionsForQuery';
13
13
  export * from './SortingActionsForObservableQuery';
14
14
  export * from './QueryFor';
15
+ export * from './QueryHttpMethod';
16
+ export * from './QueryHttpMethodResolver';
17
+ export * from './QueryHttpRequest';
15
18
  export * from './QueryResult';
16
19
  export * from './QueryResultWithState';
17
20
  export * from './IObservableQueryFor';