@cratis/arc 19.9.8 → 19.10.6

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 (95) hide show
  1. package/commands/Command.ts +1 -0
  2. package/commands/ICommand.ts +5 -0
  3. package/commands/for_Command/when_executing/with_allowed_severity_warning.ts +0 -1
  4. package/dist/cjs/commands/Command.d.ts +1 -0
  5. package/dist/cjs/commands/Command.d.ts.map +1 -1
  6. package/dist/cjs/commands/Command.js +1 -0
  7. package/dist/cjs/commands/Command.js.map +1 -1
  8. package/dist/cjs/commands/ICommand.d.ts +1 -0
  9. package/dist/cjs/commands/ICommand.d.ts.map +1 -1
  10. package/dist/cjs/queries/IObservableQueryFor.d.ts +1 -0
  11. package/dist/cjs/queries/IObservableQueryFor.d.ts.map +1 -1
  12. package/dist/cjs/queries/IQueryFor.d.ts +1 -0
  13. package/dist/cjs/queries/IQueryFor.d.ts.map +1 -1
  14. package/dist/cjs/queries/ObservableQueryFor.d.ts +1 -0
  15. package/dist/cjs/queries/ObservableQueryFor.d.ts.map +1 -1
  16. package/dist/cjs/queries/ObservableQueryFor.js +1 -0
  17. package/dist/cjs/queries/ObservableQueryFor.js.map +1 -1
  18. package/dist/cjs/queries/QueryFor.d.ts +1 -0
  19. package/dist/cjs/queries/QueryFor.d.ts.map +1 -1
  20. package/dist/cjs/queries/QueryFor.js +1 -0
  21. package/dist/cjs/queries/QueryFor.js.map +1 -1
  22. package/dist/cjs/queries/for_ObservableQueryFor/given/TestQueries.d.ts +11 -0
  23. package/dist/cjs/queries/for_ObservableQueryFor/given/TestQueries.d.ts.map +1 -1
  24. package/dist/cjs/queries/for_ObservableQueryFor/given/an_observable_query_for.d.ts +2 -1
  25. package/dist/cjs/queries/for_ObservableQueryFor/given/an_observable_query_for.d.ts.map +1 -1
  26. package/dist/cjs/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.d.ts +2 -0
  27. package/dist/cjs/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.d.ts.map +1 -0
  28. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.d.ts +2 -0
  29. package/dist/cjs/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.d.ts.map +1 -0
  30. package/dist/cjs/queries/for_QueryFor/given/TestQueries.d.ts +11 -0
  31. package/dist/cjs/queries/for_QueryFor/given/TestQueries.d.ts.map +1 -1
  32. package/dist/cjs/queries/for_QueryFor/given/a_query_for.d.ts +2 -1
  33. package/dist/cjs/queries/for_QueryFor/given/a_query_for.d.ts.map +1 -1
  34. package/dist/cjs/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.d.ts +2 -0
  35. package/dist/cjs/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.d.ts.map +1 -0
  36. package/dist/esm/commands/Command.d.ts +1 -0
  37. package/dist/esm/commands/Command.d.ts.map +1 -1
  38. package/dist/esm/commands/Command.js +1 -0
  39. package/dist/esm/commands/Command.js.map +1 -1
  40. package/dist/esm/commands/ICommand.d.ts +1 -0
  41. package/dist/esm/commands/ICommand.d.ts.map +1 -1
  42. package/dist/esm/commands/for_Command/when_executing/with_allowed_severity_warning.js.map +1 -1
  43. package/dist/esm/queries/IObservableQueryFor.d.ts +1 -0
  44. package/dist/esm/queries/IObservableQueryFor.d.ts.map +1 -1
  45. package/dist/esm/queries/IQueryFor.d.ts +1 -0
  46. package/dist/esm/queries/IQueryFor.d.ts.map +1 -1
  47. package/dist/esm/queries/ObservableQueryFor.d.ts +1 -0
  48. package/dist/esm/queries/ObservableQueryFor.d.ts.map +1 -1
  49. package/dist/esm/queries/ObservableQueryFor.js +1 -0
  50. package/dist/esm/queries/ObservableQueryFor.js.map +1 -1
  51. package/dist/esm/queries/QueryFor.d.ts +1 -0
  52. package/dist/esm/queries/QueryFor.d.ts.map +1 -1
  53. package/dist/esm/queries/QueryFor.js +1 -0
  54. package/dist/esm/queries/QueryFor.js.map +1 -1
  55. package/dist/esm/queries/for_ObservableQueryFor/given/TestQueries.d.ts +11 -0
  56. package/dist/esm/queries/for_ObservableQueryFor/given/TestQueries.d.ts.map +1 -1
  57. package/dist/esm/queries/for_ObservableQueryFor/given/TestQueries.js +14 -0
  58. package/dist/esm/queries/for_ObservableQueryFor/given/TestQueries.js.map +1 -1
  59. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_for.d.ts +2 -1
  60. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_for.d.ts.map +1 -1
  61. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_for.js +3 -1
  62. package/dist/esm/queries/for_ObservableQueryFor/given/an_observable_query_for.js.map +1 -1
  63. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.d.ts +2 -0
  64. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.d.ts.map +1 -0
  65. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.js +35 -0
  66. package/dist/esm/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.js.map +1 -0
  67. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.d.ts +2 -0
  68. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.d.ts.map +1 -0
  69. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.js +41 -0
  70. package/dist/esm/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.js.map +1 -0
  71. package/dist/esm/queries/for_QueryFor/given/TestQueries.d.ts +11 -0
  72. package/dist/esm/queries/for_QueryFor/given/TestQueries.d.ts.map +1 -1
  73. package/dist/esm/queries/for_QueryFor/given/TestQueries.js +14 -0
  74. package/dist/esm/queries/for_QueryFor/given/TestQueries.js.map +1 -1
  75. package/dist/esm/queries/for_QueryFor/given/a_query_for.d.ts +2 -1
  76. package/dist/esm/queries/for_QueryFor/given/a_query_for.d.ts.map +1 -1
  77. package/dist/esm/queries/for_QueryFor/given/a_query_for.js +3 -1
  78. package/dist/esm/queries/for_QueryFor/given/a_query_for.js.map +1 -1
  79. package/dist/esm/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.d.ts +2 -0
  80. package/dist/esm/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.d.ts.map +1 -0
  81. package/dist/esm/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.js +35 -0
  82. package/dist/esm/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.js.map +1 -0
  83. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +2 -2
  85. package/queries/IObservableQueryFor.ts +5 -0
  86. package/queries/IQueryFor.ts +5 -0
  87. package/queries/ObservableQueryFor.ts +1 -0
  88. package/queries/QueryFor.ts +1 -0
  89. package/queries/for_ObservableQueryFor/given/TestQueries.ts +22 -0
  90. package/queries/for_ObservableQueryFor/given/an_observable_query_for.ts +9 -1
  91. package/queries/for_ObservableQueryFor/when_performing/with_partially_missing_required_arguments.ts +45 -0
  92. package/queries/for_ObservableQueryFor/when_subscribing/with_partially_missing_required_arguments.ts +52 -0
  93. package/queries/for_QueryFor/given/TestQueries.ts +22 -0
  94. package/queries/for_QueryFor/given/a_query_for.ts +9 -1
  95. package/queries/for_QueryFor/when_performing/with_partially_missing_required_arguments.ts +45 -0
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@cratis/arc",
3
- "version": "19.9.8",
3
+ "version": "19.10.6",
4
4
  "description": "",
5
5
  "author": "Cratis",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/cratis/arc.git"
9
+ "url": "git+https://github.com/Cratis/Arc.git"
10
10
  },
11
11
  "publishConfig": {
12
12
  "access": "public"
@@ -21,6 +21,11 @@ export interface IObservableQueryFor<TDataType, TArguments = object> extends IQu
21
21
  readonly requiredRequestParameters: string[];
22
22
  readonly defaultValue: TDataType;
23
23
 
24
+ /**
25
+ * Gets the roles required to perform the query. An empty array means no specific roles are required.
26
+ */
27
+ readonly roles: string[];
28
+
24
29
  /**
25
30
  * Subscribe to the query. This will create a subscription onto the server.
26
31
  * @param {OnNextResult} callback The callback that will receive result from the server.
@@ -15,6 +15,11 @@ export interface IQueryFor<TDataType, TArguments = object> extends IQuery, IHave
15
15
  readonly requiredRequestParameters: string[];
16
16
  readonly defaultValue: TDataType;
17
17
 
18
+ /**
19
+ * Gets the roles required to perform the query. An empty array means no specific roles are required.
20
+ */
21
+ readonly roles: string[];
22
+
18
23
  /**
19
24
  * Gets the current arguments for the query.
20
25
  */
@@ -35,6 +35,7 @@ export abstract class ObservableQueryFor<TDataType, TParameters = object> implem
35
35
 
36
36
  abstract readonly route: string;
37
37
  abstract readonly defaultValue: TDataType;
38
+ readonly roles: string[] = [];
38
39
  abstract readonly parameterDescriptors: ParameterDescriptor[];
39
40
  abstract get requiredRequestParameters(): string[];
40
41
  sorting: Sorting;
@@ -29,6 +29,7 @@ export abstract class QueryFor<TDataType, TParameters = object> implements IQuer
29
29
  /* eslint-disable @typescript-eslint/no-explicit-any */
30
30
  readonly validation?: QueryValidator<any>;
31
31
  /* eslint-enable @typescript-eslint/no-explicit-any */
32
+ readonly roles: string[] = [];
32
33
  abstract readonly parameterDescriptors: ParameterDescriptor[];
33
34
  abstract get requiredRequestParameters(): string[];
34
35
  abstract defaultValue: TDataType;
@@ -76,6 +76,28 @@ export class TestObservableQueryWithRouteAndQueryArgs extends ObservableQueryFor
76
76
  return ['id'];
77
77
  }
78
78
 
79
+ constructor() {
80
+ super(String as Constructor, false);
81
+ }
82
+ }
83
+
84
+ export interface TestObservableQueryWithMultipleRequiredParametersArguments {
85
+ userId: string;
86
+ category: string;
87
+ }
88
+
89
+ export class TestObservableQueryWithMultipleRequiredParameters extends ObservableQueryFor<string, TestObservableQueryWithMultipleRequiredParametersArguments> {
90
+ readonly route = '/api/filter/{userId}/{category}';
91
+ readonly defaultValue = '';
92
+ readonly parameterDescriptors: ParameterDescriptor[] = [
93
+ new ParameterDescriptor('userId', String as Constructor),
94
+ new ParameterDescriptor('category', String as Constructor)
95
+ ];
96
+
97
+ get requiredRequestParameters(): string[] {
98
+ return ['userId', 'category'];
99
+ }
100
+
79
101
  constructor() {
80
102
  super(String as Constructor, false);
81
103
  }
@@ -1,18 +1,26 @@
1
1
  // Copyright (c) Cratis. All rights reserved.
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
3
 
4
- import { TestObservableQuery, TestEnumerableQuery, TestObservableQueryWithParameterDescriptorValues, TestObservableQueryWithRouteAndQueryArgs } from './TestQueries';
4
+ import {
5
+ TestObservableQuery,
6
+ TestEnumerableQuery,
7
+ TestObservableQueryWithParameterDescriptorValues,
8
+ TestObservableQueryWithRouteAndQueryArgs,
9
+ TestObservableQueryWithMultipleRequiredParameters
10
+ } from './TestQueries';
5
11
 
6
12
  export class an_observable_query_for {
7
13
  query: TestObservableQuery;
8
14
  enumerableQuery: TestEnumerableQuery;
9
15
  queryWithParameterDescriptorValues: TestObservableQueryWithParameterDescriptorValues;
10
16
  queryWithRouteAndQueryArgs: TestObservableQueryWithRouteAndQueryArgs;
17
+ queryWithMultipleRequiredParameters: TestObservableQueryWithMultipleRequiredParameters;
11
18
 
12
19
  constructor() {
13
20
  this.query = new TestObservableQuery();
14
21
  this.enumerableQuery = new TestEnumerableQuery();
15
22
  this.queryWithParameterDescriptorValues = new TestObservableQueryWithParameterDescriptorValues();
16
23
  this.queryWithRouteAndQueryArgs = new TestObservableQueryWithRouteAndQueryArgs();
24
+ this.queryWithMultipleRequiredParameters = new TestObservableQueryWithMultipleRequiredParameters();
17
25
  }
18
26
  }
@@ -0,0 +1,45 @@
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 { an_observable_query_for } from '../given/an_observable_query_for';
5
+ import { given } from '../../../given';
6
+ import * as sinon from 'sinon';
7
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
8
+ import { QueryResult } from '../../QueryResult';
9
+
10
+ describe('when performing with partially missing required arguments', given(an_observable_query_for, context => {
11
+ let result: QueryResult<string>;
12
+ let fetchStub: sinon.SinonStub;
13
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
14
+
15
+ beforeEach(async () => {
16
+ fetchHelper = createFetchHelper();
17
+ fetchStub = fetchHelper.stubFetch();
18
+ fetchStub.resolves({
19
+ json: sinon.stub().resolves({}),
20
+ ok: true,
21
+ status: 200
22
+ } as unknown as Response);
23
+
24
+ result = await context.queryWithMultipleRequiredParameters.perform({
25
+ userId: 'user-1',
26
+ category: ''
27
+ });
28
+ });
29
+
30
+ afterEach(() => {
31
+ fetchHelper.restore();
32
+ });
33
+
34
+ it('should return unsuccessful result', () => {
35
+ result.isSuccess.should.be.false;
36
+ });
37
+
38
+ it('should return default value', () => {
39
+ result.data.should.equal('');
40
+ });
41
+
42
+ it('should not call fetch', () => {
43
+ fetchStub.should.not.have.been.called;
44
+ });
45
+ }));
@@ -0,0 +1,52 @@
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 { an_observable_query_for } from '../given/an_observable_query_for';
5
+ import { given } from '../../../given';
6
+
7
+ import * as sinon from 'sinon';
8
+ import { ObservableQuerySubscription } from '../../ObservableQuerySubscription';
9
+
10
+ describe('when subscribing with partially missing required arguments', given(an_observable_query_for, context => {
11
+ let callback: sinon.SinonStub;
12
+ let subscription: ObservableQuerySubscription<string>;
13
+ let webSocketStub: sinon.SinonStub;
14
+
15
+ beforeEach(() => {
16
+ context.queryWithMultipleRequiredParameters.setOrigin('https://example.com');
17
+ callback = sinon.stub();
18
+ webSocketStub = sinon.stub(global, 'WebSocket').callsFake(() => ({
19
+ onopen: null,
20
+ onclose: null,
21
+ onerror: null,
22
+ onmessage: null,
23
+ close: sinon.stub(),
24
+ send: sinon.stub()
25
+ } as unknown as WebSocket));
26
+
27
+ subscription = context.queryWithMultipleRequiredParameters.subscribe(callback, {
28
+ userId: 'user-1',
29
+ category: ''
30
+ });
31
+ });
32
+
33
+ afterEach(() => {
34
+ if (subscription) {
35
+ subscription.unsubscribe();
36
+ }
37
+ webSocketStub.restore();
38
+ });
39
+
40
+ it('should return a subscription', () => {
41
+ subscription.should.not.be.undefined;
42
+ });
43
+
44
+ it('should not create a web socket connection', () => {
45
+ webSocketStub.should.not.have.been.called;
46
+ });
47
+
48
+ it('should call callback immediately with default value', () => {
49
+ callback.called.should.be.true;
50
+ callback.firstCall.args[0].isSuccess.should.be.true;
51
+ });
52
+ }));
@@ -66,6 +66,28 @@ export class TestQueryForWithParameterDescriptorValues extends QueryFor<string,
66
66
  return [];
67
67
  }
68
68
 
69
+ constructor() {
70
+ super(String as Constructor, false);
71
+ }
72
+ }
73
+
74
+ export interface TestQueryForWithMultipleRequiredParametersArguments {
75
+ userId: string;
76
+ category: string;
77
+ }
78
+
79
+ export class TestQueryForWithMultipleRequiredParameters extends QueryFor<string, TestQueryForWithMultipleRequiredParametersArguments> {
80
+ readonly route = '/api/filter/{userId}/{category}';
81
+ readonly defaultValue = '';
82
+ readonly parameterDescriptors: ParameterDescriptor[] = [
83
+ new ParameterDescriptor('userId', String as Constructor),
84
+ new ParameterDescriptor('category', String as Constructor)
85
+ ];
86
+
87
+ get requiredRequestParameters(): string[] {
88
+ return ['userId', 'category'];
89
+ }
90
+
69
91
  constructor() {
70
92
  super(String as Constructor, false);
71
93
  }
@@ -1,18 +1,26 @@
1
1
  // Copyright (c) Cratis. All rights reserved.
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
3
 
4
- import { TestQueryFor, TestEnumerableQueryFor, TestQueryForWithoutRequiredParams, TestQueryForWithParameterDescriptorValues } from './TestQueries';
4
+ import {
5
+ TestQueryFor,
6
+ TestEnumerableQueryFor,
7
+ TestQueryForWithoutRequiredParams,
8
+ TestQueryForWithParameterDescriptorValues,
9
+ TestQueryForWithMultipleRequiredParameters
10
+ } from './TestQueries';
5
11
 
6
12
  export class a_query_for {
7
13
  query: TestQueryFor;
8
14
  enumerableQuery: TestEnumerableQueryFor;
9
15
  queryWithoutParams: TestQueryForWithoutRequiredParams;
10
16
  queryWithParameterDescriptorValues: TestQueryForWithParameterDescriptorValues;
17
+ queryWithMultipleRequiredParameters: TestQueryForWithMultipleRequiredParameters;
11
18
 
12
19
  constructor() {
13
20
  this.query = new TestQueryFor();
14
21
  this.enumerableQuery = new TestEnumerableQueryFor();
15
22
  this.queryWithoutParams = new TestQueryForWithoutRequiredParams();
16
23
  this.queryWithParameterDescriptorValues = new TestQueryForWithParameterDescriptorValues();
24
+ this.queryWithMultipleRequiredParameters = new TestQueryForWithMultipleRequiredParameters();
17
25
  }
18
26
  }
@@ -0,0 +1,45 @@
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 { a_query_for } from '../given/a_query_for';
5
+ import { given } from '../../../given';
6
+ import * as sinon from 'sinon';
7
+ import { createFetchHelper } from '../../../helpers/fetchHelper';
8
+ import { QueryResult } from '../../QueryResult';
9
+
10
+ describe('when performing with partially missing required arguments', given(a_query_for, context => {
11
+ let result: QueryResult<string>;
12
+ let fetchStub: sinon.SinonStub;
13
+ let fetchHelper: { stubFetch: () => sinon.SinonStub; restore: () => void };
14
+
15
+ beforeEach(async () => {
16
+ fetchHelper = createFetchHelper();
17
+ fetchStub = fetchHelper.stubFetch();
18
+ fetchStub.resolves({
19
+ json: sinon.stub().resolves({}),
20
+ ok: true,
21
+ status: 200
22
+ } as unknown as Response);
23
+
24
+ result = await context.queryWithMultipleRequiredParameters.perform({
25
+ userId: 'user-1',
26
+ category: ''
27
+ });
28
+ });
29
+
30
+ afterEach(() => {
31
+ fetchHelper.restore();
32
+ });
33
+
34
+ it('should return unsuccessful result', () => {
35
+ result.isSuccess.should.be.false;
36
+ });
37
+
38
+ it('should return default value', () => {
39
+ result.data.should.equal('');
40
+ });
41
+
42
+ it('should not call fetch', () => {
43
+ fetchStub.should.not.have.been.called;
44
+ });
45
+ }));