@furystack/rest-service 12.3.5 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/README.md +47 -28
- package/esm/actions/get-current-user.spec.js +10 -6
- package/esm/actions/get-current-user.spec.js.map +1 -1
- package/esm/actions/index.d.ts +0 -1
- package/esm/actions/index.d.ts.map +1 -1
- package/esm/actions/index.js +0 -1
- package/esm/actions/index.js.map +1 -1
- package/esm/actions/is-authenticated.spec.js +10 -6
- package/esm/actions/is-authenticated.spec.js.map +1 -1
- package/esm/actions/logout-action.spec.js +11 -9
- package/esm/actions/logout-action.spec.js.map +1 -1
- package/esm/actions/logout.js +1 -1
- package/esm/actions/logout.js.map +1 -1
- package/esm/actions/password-login-action.js +1 -1
- package/esm/actions/password-login-action.js.map +1 -1
- package/esm/actions/password-login-action.spec.js +23 -28
- package/esm/actions/password-login-action.spec.js.map +1 -1
- package/esm/authenticate.js +1 -1
- package/esm/authenticate.js.map +1 -1
- package/esm/authenticate.spec.js +41 -33
- package/esm/authenticate.spec.js.map +1 -1
- package/esm/authorize.spec.js +34 -29
- package/esm/authorize.spec.js.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.d.ts +6 -11
- package/esm/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.js +7 -11
- package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.spec.js +14 -21
- package/esm/endpoint-generators/create-delete-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.d.ts +11 -11
- package/esm/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.js +13 -12
- package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.spec.js +43 -70
- package/esm/endpoint-generators/create-get-collection-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.d.ts +6 -11
- package/esm/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.js +7 -11
- package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.spec.js +16 -33
- package/esm/endpoint-generators/create-get-entity-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +1 -15
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.js +1 -24
- package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -1
- package/esm/endpoint-generators/create-get-schema-action.d.ts +1 -1
- package/esm/endpoint-generators/create-get-schema-action.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-schema-action.js.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.d.ts +7 -13
- package/esm/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.js +8 -13
- package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.spec.js +10 -17
- package/esm/endpoint-generators/create-patch-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.d.ts +7 -13
- package/esm/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.js +8 -13
- package/esm/endpoint-generators/create-post-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.spec.js +41 -14
- package/esm/endpoint-generators/create-post-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/utils.d.ts +17 -2
- package/esm/endpoint-generators/utils.d.ts.map +1 -1
- package/esm/endpoint-generators/utils.js +33 -20
- package/esm/endpoint-generators/utils.js.map +1 -1
- package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +0 -2
- package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -1
- package/esm/get-schema-from-api.d.ts +1 -1
- package/esm/get-schema-from-api.d.ts.map +1 -1
- package/esm/get-schema-from-api.spec.js.map +1 -1
- package/esm/helpers.d.ts +53 -87
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +91 -92
- package/esm/helpers.js.map +1 -1
- package/esm/helpers.spec.d.ts +2 -1
- package/esm/helpers.spec.d.ts.map +1 -1
- package/esm/helpers.spec.js +41 -38
- package/esm/helpers.spec.js.map +1 -1
- package/esm/http-authentication-settings.d.ts +35 -12
- package/esm/http-authentication-settings.d.ts.map +1 -1
- package/esm/http-authentication-settings.js +21 -29
- package/esm/http-authentication-settings.js.map +1 -1
- package/esm/http-server-pool.d.ts +64 -0
- package/esm/http-server-pool.d.ts.map +1 -0
- package/esm/http-server-pool.js +95 -0
- package/esm/http-server-pool.js.map +1 -0
- package/esm/http-server-pool.spec.d.ts +2 -0
- package/esm/http-server-pool.spec.d.ts.map +1 -0
- package/esm/http-server-pool.spec.js +193 -0
- package/esm/http-server-pool.spec.js.map +1 -0
- package/esm/http-user-context.d.ts +31 -44
- package/esm/http-user-context.d.ts.map +1 -1
- package/esm/http-user-context.js +76 -95
- package/esm/http-user-context.js.map +1 -1
- package/esm/http-user-context.spec.d.ts +8 -2
- package/esm/http-user-context.spec.d.ts.map +1 -1
- package/esm/http-user-context.spec.js +189 -337
- package/esm/http-user-context.spec.js.map +1 -1
- package/esm/index.d.ts +6 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +6 -4
- package/esm/index.js.map +1 -1
- package/esm/login-response-strategy.d.ts +11 -10
- package/esm/login-response-strategy.d.ts.map +1 -1
- package/esm/login-response-strategy.js +7 -6
- package/esm/login-response-strategy.js.map +1 -1
- package/esm/login-response-strategy.spec.js +25 -29
- package/esm/login-response-strategy.spec.js.map +1 -1
- package/esm/openapi/generate-openapi-document.d.ts +0 -8
- package/esm/openapi/generate-openapi-document.d.ts.map +1 -1
- package/esm/openapi/generate-openapi-document.js +0 -2
- package/esm/openapi/generate-openapi-document.js.map +1 -1
- package/esm/proxy-manager.spec.js +152 -176
- package/esm/proxy-manager.spec.js.map +1 -1
- package/esm/proxy-runtime.d.ts +27 -0
- package/esm/proxy-runtime.d.ts.map +1 -0
- package/esm/proxy-runtime.js +45 -0
- package/esm/proxy-runtime.js.map +1 -0
- package/esm/proxy-runtime.spec.d.ts +2 -0
- package/esm/proxy-runtime.spec.d.ts.map +1 -0
- package/esm/proxy-runtime.spec.js +39 -0
- package/esm/proxy-runtime.spec.js.map +1 -0
- package/esm/rest-api-runtime.d.ts +76 -0
- package/esm/rest-api-runtime.d.ts.map +1 -0
- package/esm/rest-api-runtime.js +131 -0
- package/esm/rest-api-runtime.js.map +1 -0
- package/esm/rest-api-runtime.spec.d.ts +2 -0
- package/esm/rest-api-runtime.spec.d.ts.map +1 -0
- package/esm/rest-api-runtime.spec.js +58 -0
- package/esm/rest-api-runtime.spec.js.map +1 -0
- package/esm/rest-service.integration.spec.d.ts +1 -1
- package/esm/rest-service.integration.spec.d.ts.map +1 -1
- package/esm/rest-service.integration.spec.js +60 -82
- package/esm/rest-service.integration.spec.js.map +1 -1
- package/esm/rest.integration.test.js +26 -84
- package/esm/rest.integration.test.js.map +1 -1
- package/esm/server-telemetry.d.ts +57 -0
- package/esm/server-telemetry.d.ts.map +1 -0
- package/esm/server-telemetry.js +26 -0
- package/esm/server-telemetry.js.map +1 -0
- package/esm/server-telemetry.spec.d.ts +2 -0
- package/esm/server-telemetry.spec.d.ts.map +1 -0
- package/esm/server-telemetry.spec.js +52 -0
- package/esm/server-telemetry.spec.js.map +1 -0
- package/esm/static-server-manager.spec.js +60 -125
- package/esm/static-server-manager.spec.js.map +1 -1
- package/esm/static-site-runtime.d.ts +21 -0
- package/esm/static-site-runtime.d.ts.map +1 -0
- package/esm/static-site-runtime.js +48 -0
- package/esm/static-site-runtime.js.map +1 -0
- package/esm/static-site-runtime.spec.d.ts +2 -0
- package/esm/static-site-runtime.spec.d.ts.map +1 -0
- package/esm/static-site-runtime.spec.js +30 -0
- package/esm/static-site-runtime.spec.js.map +1 -0
- package/esm/user-store.d.ts +39 -0
- package/esm/user-store.d.ts.map +1 -0
- package/esm/user-store.js +62 -0
- package/esm/user-store.js.map +1 -0
- package/esm/user-store.spec.d.ts +2 -0
- package/esm/user-store.spec.d.ts.map +1 -0
- package/esm/user-store.spec.js +72 -0
- package/esm/user-store.spec.js.map +1 -0
- package/esm/validate.integration.spec.js +26 -83
- package/esm/validate.integration.spec.js.map +1 -1
- package/package.json +8 -8
- package/src/actions/get-current-user.spec.ts +11 -10
- package/src/actions/index.ts +0 -1
- package/src/actions/is-authenticated.spec.ts +12 -7
- package/src/actions/logout-action.spec.ts +12 -12
- package/src/actions/logout.ts +1 -1
- package/src/actions/password-login-action.spec.ts +30 -30
- package/src/actions/password-login-action.ts +1 -1
- package/src/authenticate.spec.ts +45 -51
- package/src/authenticate.ts +1 -1
- package/src/authorize.spec.ts +37 -39
- package/src/endpoint-generators/create-delete-endpoint.spec.ts +16 -24
- package/src/endpoint-generators/create-delete-endpoint.ts +11 -17
- package/src/endpoint-generators/create-get-collection-endpoint.spec.ts +45 -78
- package/src/endpoint-generators/create-get-collection-endpoint.ts +17 -19
- package/src/endpoint-generators/create-get-entity-endpoint.spec.ts +17 -33
- package/src/endpoint-generators/create-get-entity-endpoint.ts +11 -17
- package/src/endpoint-generators/create-get-openapi-document-action.ts +2 -38
- package/src/endpoint-generators/create-get-schema-action.ts +1 -1
- package/src/endpoint-generators/create-patch-endpoint.spec.ts +11 -18
- package/src/endpoint-generators/create-patch-endpoint.ts +12 -23
- package/src/endpoint-generators/create-post-endpoint.spec.ts +45 -14
- package/src/endpoint-generators/create-post-endpoint.ts +13 -23
- package/src/endpoint-generators/utils.ts +36 -28
- package/src/endpoint-generators/with-schema-and-openapi-action.ts +0 -3
- package/src/get-schema-from-api.spec.ts +1 -1
- package/src/get-schema-from-api.ts +1 -1
- package/src/helpers.spec.ts +51 -41
- package/src/helpers.ts +140 -109
- package/src/http-authentication-settings.ts +51 -25
- package/src/http-server-pool.spec.ts +220 -0
- package/src/http-server-pool.ts +169 -0
- package/src/http-user-context.spec.ts +203 -383
- package/src/http-user-context.ts +114 -91
- package/src/index.ts +6 -4
- package/src/login-response-strategy.spec.ts +32 -31
- package/src/login-response-strategy.ts +13 -12
- package/src/openapi/generate-openapi-document.ts +0 -3
- package/src/proxy-manager.spec.ts +152 -182
- package/src/proxy-runtime.spec.ts +50 -0
- package/src/proxy-runtime.ts +75 -0
- package/src/rest-api-runtime.spec.ts +77 -0
- package/src/rest-api-runtime.ts +204 -0
- package/src/rest-service.integration.spec.ts +68 -87
- package/src/rest.integration.test.ts +27 -87
- package/src/server-telemetry.spec.ts +56 -0
- package/src/server-telemetry.ts +51 -0
- package/src/static-server-manager.spec.ts +63 -151
- package/src/static-site-runtime.spec.ts +39 -0
- package/src/static-site-runtime.ts +75 -0
- package/src/user-store.spec.ts +86 -0
- package/src/user-store.ts +68 -0
- package/src/validate.integration.spec.ts +39 -97
- package/esm/actions/login-action.spec.d.ts +0 -2
- package/esm/actions/login-action.spec.d.ts.map +0 -1
- package/esm/actions/login-action.spec.js +0 -34
- package/esm/actions/login-action.spec.js.map +0 -1
- package/esm/actions/login.d.ts +0 -19
- package/esm/actions/login.d.ts.map +0 -1
- package/esm/actions/login.js +0 -27
- package/esm/actions/login.js.map +0 -1
- package/esm/api-manager.d.ts +0 -104
- package/esm/api-manager.d.ts.map +0 -1
- package/esm/api-manager.js +0 -180
- package/esm/api-manager.js.map +0 -1
- package/esm/proxy-manager.d.ts +0 -53
- package/esm/proxy-manager.d.ts.map +0 -1
- package/esm/proxy-manager.js +0 -84
- package/esm/proxy-manager.js.map +0 -1
- package/esm/server-manager.d.ts +0 -48
- package/esm/server-manager.d.ts.map +0 -1
- package/esm/server-manager.js +0 -100
- package/esm/server-manager.js.map +0 -1
- package/esm/static-server-manager.d.ts +0 -19
- package/esm/static-server-manager.d.ts.map +0 -1
- package/esm/static-server-manager.js +0 -65
- package/esm/static-server-manager.js.map +0 -1
- package/esm/swagger/generate-swagger-json.spec.d.ts +0 -2
- package/esm/swagger/generate-swagger-json.spec.d.ts.map +0 -1
- package/esm/swagger/generate-swagger-json.spec.js +0 -215
- package/esm/swagger/generate-swagger-json.spec.js.map +0 -1
- package/src/actions/login-action.spec.ts +0 -42
- package/src/actions/login.ts +0 -32
- package/src/api-manager.ts +0 -308
- package/src/proxy-manager.ts +0 -102
- package/src/server-manager.ts +0 -135
- package/src/static-server-manager.ts +0 -90
- package/src/swagger/generate-swagger-json.spec.ts +0 -250
|
@@ -1,33 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { MockClass, setupContext } from './utils.js';
|
|
4
|
-
import { createGetCollectionEndpoint } from './create-get-collection-endpoint.js';
|
|
1
|
+
import { getPort } from '@furystack/core/port-generator';
|
|
2
|
+
import { createInjector } from '@furystack/inject';
|
|
5
3
|
import { serializeToQueryString } from '@furystack/rest';
|
|
6
|
-
import {
|
|
4
|
+
import { usingAsync } from '@furystack/utils';
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
7
6
|
import { useRestService } from '../helpers.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
const addMockEntities = async (i) =>
|
|
11
|
-
.
|
|
7
|
+
import { createGetCollectionEndpoint } from './create-get-collection-endpoint.js';
|
|
8
|
+
import { MockDataSet, setupContext } from './utils.js';
|
|
9
|
+
const addMockEntities = async (i) => i
|
|
10
|
+
.get(MockDataSet)
|
|
12
11
|
.add(i, { id: 'mock1', value: '4' }, { id: 'mock2', value: '3' }, { id: 'mock3', value: '2' }, { id: 'mock4', value: '1' });
|
|
13
12
|
describe('createGetCollectionEndpoint', () => {
|
|
14
|
-
it('
|
|
15
|
-
await usingAsync(
|
|
13
|
+
it('returns the collection without filter / order', async () => {
|
|
14
|
+
await usingAsync(createInjector(), async (i) => {
|
|
16
15
|
setupContext(i);
|
|
17
16
|
const port = getPort();
|
|
18
17
|
await useRestService({
|
|
19
18
|
injector: i,
|
|
20
19
|
root: '/api',
|
|
21
20
|
port,
|
|
22
|
-
api: {
|
|
23
|
-
GET: {
|
|
24
|
-
'/entities': createGetCollectionEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
25
|
-
},
|
|
26
|
-
},
|
|
21
|
+
api: { GET: { '/entities': createGetCollectionEndpoint(MockDataSet) } },
|
|
27
22
|
});
|
|
28
23
|
await addMockEntities(i);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
24
|
+
const dataSet = i.get(MockDataSet);
|
|
25
|
+
const count = await dataSet.count(i);
|
|
26
|
+
const allEntities = await dataSet.find(i, {});
|
|
31
27
|
const response = await fetch(`http://127.0.0.1:${port}/api/entities`, { method: 'GET' });
|
|
32
28
|
expect(response.ok).toBe(true);
|
|
33
29
|
const json = (await response.json());
|
|
@@ -36,24 +32,21 @@ describe('createGetCollectionEndpoint', () => {
|
|
|
36
32
|
expect(json.entries).toEqual(allEntities);
|
|
37
33
|
});
|
|
38
34
|
});
|
|
39
|
-
it('
|
|
40
|
-
await usingAsync(
|
|
35
|
+
it('returns entities in the requested order', async () => {
|
|
36
|
+
await usingAsync(createInjector(), async (i) => {
|
|
41
37
|
setupContext(i);
|
|
42
38
|
const port = getPort();
|
|
43
39
|
await useRestService({
|
|
44
40
|
injector: i,
|
|
45
41
|
root: '/api',
|
|
46
42
|
port,
|
|
47
|
-
api: {
|
|
48
|
-
GET: {
|
|
49
|
-
'/entities': createGetCollectionEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
50
|
-
},
|
|
51
|
-
},
|
|
43
|
+
api: { GET: { '/entities': createGetCollectionEndpoint(MockDataSet) } },
|
|
52
44
|
});
|
|
53
45
|
await addMockEntities(i);
|
|
54
46
|
const findOptions = { order: { value: 'ASC' } };
|
|
55
|
-
const
|
|
56
|
-
const
|
|
47
|
+
const dataSet = i.get(MockDataSet);
|
|
48
|
+
const count = await dataSet.count(i, findOptions.filter);
|
|
49
|
+
const orderedEntities = await dataSet.find(i, findOptions);
|
|
57
50
|
const response = await fetch(`http://127.0.0.1:${port}/api/entities?${serializeToQueryString({ findOptions })}`, {
|
|
58
51
|
method: 'GET',
|
|
59
52
|
});
|
|
@@ -64,27 +57,21 @@ describe('createGetCollectionEndpoint', () => {
|
|
|
64
57
|
expect(json.entries).toEqual(orderedEntities);
|
|
65
58
|
});
|
|
66
59
|
});
|
|
67
|
-
it('
|
|
68
|
-
await usingAsync(
|
|
60
|
+
it('applies a supplied filter', async () => {
|
|
61
|
+
await usingAsync(createInjector(), async (i) => {
|
|
69
62
|
setupContext(i);
|
|
70
63
|
const port = getPort();
|
|
71
64
|
await useRestService({
|
|
72
65
|
injector: i,
|
|
73
66
|
root: '/api',
|
|
74
67
|
port,
|
|
75
|
-
api: {
|
|
76
|
-
GET: {
|
|
77
|
-
'/entities': createGetCollectionEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
78
|
-
},
|
|
79
|
-
},
|
|
68
|
+
api: { GET: { '/entities': createGetCollectionEndpoint(MockDataSet) } },
|
|
80
69
|
});
|
|
81
70
|
await addMockEntities(i);
|
|
82
|
-
const findOptions = {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
const filteredEntities = await getDataSetFor(i, MockClass, 'id').find(i, findOptions);
|
|
87
|
-
expect(filteredEntities).not.toContainEqual({ id: 'mock2', value: '3' });
|
|
71
|
+
const findOptions = { filter: { id: { $ne: 'mock2' } } };
|
|
72
|
+
const dataSet = i.get(MockDataSet);
|
|
73
|
+
const count = await dataSet.count(i, findOptions.filter);
|
|
74
|
+
const filteredEntities = await dataSet.find(i, findOptions);
|
|
88
75
|
const response = await fetch(`http://127.0.0.1:${port}/api/entities?${serializeToQueryString({ findOptions })}`, {
|
|
89
76
|
method: 'GET',
|
|
90
77
|
});
|
|
@@ -95,27 +82,21 @@ describe('createGetCollectionEndpoint', () => {
|
|
|
95
82
|
expect(json.entries).toEqual(filteredEntities);
|
|
96
83
|
});
|
|
97
84
|
});
|
|
98
|
-
it('
|
|
99
|
-
await usingAsync(
|
|
85
|
+
it('applies select projection', async () => {
|
|
86
|
+
await usingAsync(createInjector(), async (i) => {
|
|
100
87
|
setupContext(i);
|
|
101
88
|
const port = getPort();
|
|
102
89
|
await useRestService({
|
|
103
90
|
injector: i,
|
|
104
91
|
root: '/api',
|
|
105
92
|
port,
|
|
106
|
-
api: {
|
|
107
|
-
GET: {
|
|
108
|
-
'/entities': createGetCollectionEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
109
|
-
},
|
|
110
|
-
},
|
|
93
|
+
api: { GET: { '/entities': createGetCollectionEndpoint(MockDataSet) } },
|
|
111
94
|
});
|
|
112
95
|
await addMockEntities(i);
|
|
113
|
-
const findOptions = {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
const selectedEntities = await getDataSetFor(i, MockClass, 'id').find(i, findOptions);
|
|
118
|
-
selectedEntities.forEach((e) => expect(e.value).toBeUndefined());
|
|
96
|
+
const findOptions = { select: ['id'] };
|
|
97
|
+
const dataSet = i.get(MockDataSet);
|
|
98
|
+
const count = await dataSet.count(i, findOptions.filter);
|
|
99
|
+
const selected = await dataSet.find(i, findOptions);
|
|
119
100
|
const response = await fetch(`http://127.0.0.1:${port}/api/entities?${serializeToQueryString({ findOptions })}`, {
|
|
120
101
|
method: 'GET',
|
|
121
102
|
});
|
|
@@ -123,39 +104,31 @@ describe('createGetCollectionEndpoint', () => {
|
|
|
123
104
|
const json = (await response.json());
|
|
124
105
|
expect(response.status).toBe(200);
|
|
125
106
|
expect(json.count).toBe(count);
|
|
126
|
-
expect(json.entries).toEqual(
|
|
107
|
+
expect(json.entries).toEqual(selected);
|
|
127
108
|
});
|
|
128
109
|
});
|
|
129
|
-
it('
|
|
130
|
-
await usingAsync(
|
|
110
|
+
it('honours top/skip', async () => {
|
|
111
|
+
await usingAsync(createInjector(), async (i) => {
|
|
131
112
|
setupContext(i);
|
|
132
113
|
const port = getPort();
|
|
133
114
|
await useRestService({
|
|
134
115
|
injector: i,
|
|
135
116
|
root: '/api',
|
|
136
117
|
port,
|
|
137
|
-
api: {
|
|
138
|
-
GET: {
|
|
139
|
-
'/entities': createGetCollectionEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
140
|
-
},
|
|
141
|
-
},
|
|
118
|
+
api: { GET: { '/entities': createGetCollectionEndpoint(MockDataSet) } },
|
|
142
119
|
});
|
|
143
120
|
await addMockEntities(i);
|
|
144
|
-
const findOptions = {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const count = await getDataSetFor(i, MockClass, 'id').count(i, findOptions.filter);
|
|
149
|
-
const topSkipEntities = await getDataSetFor(i, MockClass, 'id').find(i, findOptions);
|
|
150
|
-
expect(topSkipEntities).not.toContainEqual({ id: 'mock1', value: '4' });
|
|
151
|
-
expect(topSkipEntities).not.toContainEqual({ id: 'mock4', value: '1' });
|
|
121
|
+
const findOptions = { skip: 1, top: 2 };
|
|
122
|
+
const dataSet = i.get(MockDataSet);
|
|
123
|
+
const count = await dataSet.count(i, findOptions.filter);
|
|
124
|
+
const page = await dataSet.find(i, findOptions);
|
|
152
125
|
const response = await fetch(`http://127.0.0.1:${port}/api/entities?${serializeToQueryString({ findOptions })}`, {
|
|
153
126
|
method: 'GET',
|
|
154
127
|
});
|
|
155
128
|
expect(response.status).toBe(200);
|
|
156
129
|
const json = (await response.json());
|
|
157
130
|
expect(json.count).toBe(count);
|
|
158
|
-
expect(json.entries).toEqual(
|
|
131
|
+
expect(json.entries).toEqual(page);
|
|
159
132
|
});
|
|
160
133
|
});
|
|
161
134
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-collection-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-get-collection-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAA;AAEjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAA;AAEjF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,eAAe,GAAG,KAAK,EAAE,CAAW,EAAE,EAAE,CAC5C,CAAC;KACE,GAAG,CAAC,WAAW,CAAC;KAChB,GAAG,CACF,CAAC,EACD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAC5B,CAAA;AAEL,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA6D;gBAC/E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,2BAA2B,CAAC,WAAW,CAAC,EAAE,EAAE;aACxE,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,CAAC,CAAC,CAAA;YAExB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACxF,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;YACtE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA6D;gBAC/E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,2BAA2B,CAAC,WAAW,CAAC,EAAE,EAAE;aACxE,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,WAAW,GAAmD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAA;YAC/F,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YACxD,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,iBAAiB,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;gBAC/G,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;YACtE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA6D;gBAC/E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,2BAA2B,CAAC,WAAW,CAAC,EAAE,EAAE;aACxE,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,WAAW,GAAmD,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YACxG,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YACxD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,iBAAiB,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;gBAC/G,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;YACtE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA6D;gBAC/E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,2BAA2B,CAAC,WAAW,CAAC,EAAE,EAAE;aACxE,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,WAAW,GAAmD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAA;YACtF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAEnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,iBAAiB,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;gBAC/G,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;YACtE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA6D;gBAC/E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,2BAA2B,CAAC,WAAW,CAAC,EAAE,EAAE;aACxE,CAAC,CAAA;YACF,MAAM,eAAe,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,WAAW,GAAmD,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YACvF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAE/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,iBAAiB,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;gBAC/G,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAA;YACtE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DataSetToken } from '@furystack/repository';
|
|
2
2
|
import type { GetEntityEndpoint } from '@furystack/rest';
|
|
3
|
-
import type
|
|
3
|
+
import { type RequestAction } from '../request-action-implementation.js';
|
|
4
4
|
/**
|
|
5
|
-
* Creates a
|
|
6
|
-
* @
|
|
7
|
-
*
|
|
8
|
-
* @param options.primaryKey The field name used as primary key on the model
|
|
9
|
-
* @returns The generated endpoint
|
|
5
|
+
* Creates a GET entity endpoint backed by the DataSet resolved from the
|
|
6
|
+
* provided {@link DataSetToken}. Throws a 404 `RequestError` when the
|
|
7
|
+
* entity cannot be found.
|
|
10
8
|
*/
|
|
11
|
-
export declare const createGetEntityEndpoint: <T extends object, TPrimaryKey extends keyof T>(
|
|
12
|
-
model: Constructable<T>;
|
|
13
|
-
primaryKey: TPrimaryKey;
|
|
14
|
-
}) => RequestAction<GetEntityEndpoint<T, TPrimaryKey>>;
|
|
9
|
+
export declare const createGetEntityEndpoint: <T extends object, TPrimaryKey extends keyof T>(dataSet: DataSetToken<T, TPrimaryKey>) => RequestAction<GetEntityEndpoint<T, TPrimaryKey>>;
|
|
15
10
|
//# sourceMappingURL=create-get-entity-endpoint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-entity-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"create-get-entity-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,MAAM,EAAE,WAAW,SAAS,MAAM,CAAC,EACnF,SAAS,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,KACpC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,CAAC,CAWjD,CAAA"}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
import { RequestError } from '@furystack/rest';
|
|
2
2
|
import { JsonResult } from '../request-action-implementation.js';
|
|
3
|
-
import { getRepository } from '@furystack/repository';
|
|
4
3
|
/**
|
|
5
|
-
* Creates a
|
|
6
|
-
* @
|
|
7
|
-
*
|
|
8
|
-
* @param options.primaryKey The field name used as primary key on the model
|
|
9
|
-
* @returns The generated endpoint
|
|
4
|
+
* Creates a GET entity endpoint backed by the DataSet resolved from the
|
|
5
|
+
* provided {@link DataSetToken}. Throws a 404 `RequestError` when the
|
|
6
|
+
* entity cannot be found.
|
|
10
7
|
*/
|
|
11
|
-
export const createGetEntityEndpoint = (
|
|
12
|
-
|
|
8
|
+
export const createGetEntityEndpoint = (dataSet) => {
|
|
9
|
+
return async ({ injector, getUrlParams, getQuery }) => {
|
|
13
10
|
const { id } = getUrlParams();
|
|
14
11
|
const { select } = getQuery();
|
|
15
|
-
const
|
|
16
|
-
const entry = await
|
|
12
|
+
const ds = injector.get(dataSet);
|
|
13
|
+
const entry = await ds.get(injector, id, select);
|
|
17
14
|
if (!entry) {
|
|
18
15
|
throw new RequestError('Entity not found', 404);
|
|
19
16
|
}
|
|
20
17
|
return JsonResult(entry);
|
|
21
18
|
};
|
|
22
|
-
return endpoint;
|
|
23
19
|
};
|
|
24
20
|
//# sourceMappingURL=create-get-entity-endpoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-entity-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-get-entity-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAqC,EACa,EAAE;IACpD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpD,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,77 +1,60 @@
|
|
|
1
1
|
import { getPort } from '@furystack/core/port-generator';
|
|
2
|
-
import {
|
|
3
|
-
import { getDataSetFor } from '@furystack/repository';
|
|
2
|
+
import { createInjector } from '@furystack/inject';
|
|
4
3
|
import { serializeToQueryString } from '@furystack/rest';
|
|
5
4
|
import { usingAsync } from '@furystack/utils';
|
|
6
5
|
import { describe, expect, it } from 'vitest';
|
|
7
6
|
import { useRestService } from '../helpers.js';
|
|
8
7
|
import { createGetEntityEndpoint } from './create-get-entity-endpoint.js';
|
|
9
|
-
import {
|
|
8
|
+
import { MockDataSet, setupContext } from './utils.js';
|
|
10
9
|
describe('createGetEntityEndpoint', () => {
|
|
11
|
-
it('
|
|
12
|
-
await usingAsync(
|
|
10
|
+
it('returns the entity by id', async () => {
|
|
11
|
+
await usingAsync(createInjector(), async (i) => {
|
|
13
12
|
setupContext(i);
|
|
14
13
|
const port = getPort();
|
|
15
14
|
await useRestService({
|
|
16
15
|
injector: i,
|
|
17
16
|
root: '/api',
|
|
18
17
|
port,
|
|
19
|
-
api: {
|
|
20
|
-
GET: {
|
|
21
|
-
'/:id': createGetEntityEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
22
|
-
},
|
|
23
|
-
},
|
|
18
|
+
api: { GET: { '/:id': createGetEntityEndpoint(MockDataSet) } },
|
|
24
19
|
});
|
|
25
20
|
const mockEntity = { id: 'mock', value: 'mock' };
|
|
26
|
-
await
|
|
21
|
+
await i.get(MockDataSet).add(i, mockEntity);
|
|
27
22
|
const response = await fetch(`http://127.0.0.1:${port}/api/mock`, { method: 'GET' });
|
|
28
23
|
expect(response.status).toBe(200);
|
|
29
|
-
|
|
30
|
-
expect(body).toEqual(mockEntity);
|
|
24
|
+
expect(await response.json()).toEqual(mockEntity);
|
|
31
25
|
});
|
|
32
26
|
});
|
|
33
|
-
it('
|
|
34
|
-
await usingAsync(
|
|
27
|
+
it('honours a select query parameter', async () => {
|
|
28
|
+
await usingAsync(createInjector(), async (i) => {
|
|
35
29
|
setupContext(i);
|
|
36
30
|
const port = getPort();
|
|
37
31
|
await useRestService({
|
|
38
32
|
injector: i,
|
|
39
33
|
root: '/api',
|
|
40
34
|
port,
|
|
41
|
-
api: {
|
|
42
|
-
GET: {
|
|
43
|
-
'/:id': createGetEntityEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
44
|
-
},
|
|
45
|
-
},
|
|
35
|
+
api: { GET: { '/:id': createGetEntityEndpoint(MockDataSet) } },
|
|
46
36
|
});
|
|
47
|
-
|
|
48
|
-
await getDataSetFor(i, MockClass, 'id').add(i, mockEntity);
|
|
37
|
+
await i.get(MockDataSet).add(i, { id: 'mock', value: 'mock' });
|
|
49
38
|
const response = await fetch(`http://127.0.0.1:${port}/api/mock?${serializeToQueryString({ select: ['id'] })}`, {
|
|
50
39
|
method: 'GET',
|
|
51
40
|
});
|
|
52
41
|
expect(response.status).toBe(200);
|
|
53
|
-
|
|
54
|
-
expect(body).toEqual({ id: mockEntity.id });
|
|
42
|
+
expect(await response.json()).toEqual({ id: 'mock' });
|
|
55
43
|
});
|
|
56
44
|
});
|
|
57
|
-
it('
|
|
58
|
-
await usingAsync(
|
|
45
|
+
it('responds with 404 when the entity does not exist', async () => {
|
|
46
|
+
await usingAsync(createInjector(), async (i) => {
|
|
59
47
|
setupContext(i);
|
|
60
48
|
const port = getPort();
|
|
61
49
|
await useRestService({
|
|
62
50
|
injector: i,
|
|
63
51
|
root: '/api',
|
|
64
52
|
port,
|
|
65
|
-
api: {
|
|
66
|
-
GET: {
|
|
67
|
-
'/:id': createGetEntityEndpoint({ model: MockClass, primaryKey: 'id' }),
|
|
68
|
-
},
|
|
69
|
-
},
|
|
53
|
+
api: { GET: { '/:id': createGetEntityEndpoint(MockDataSet) } },
|
|
70
54
|
});
|
|
71
55
|
const result = await fetch(`http://127.0.0.1:${port}/api/mock`, { method: 'GET' });
|
|
72
56
|
expect(result.status).toBe(404);
|
|
73
|
-
|
|
74
|
-
expect(body).toEqual({ message: 'Entity not found' });
|
|
57
|
+
expect(await result.json()).toEqual({ message: 'Entity not found' });
|
|
75
58
|
});
|
|
76
59
|
});
|
|
77
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-entity-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-get-entity-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OpenApiDocument, RestApi } from '@furystack/rest';
|
|
2
|
-
import type { RestApiImplementation } from '../api-manager.js';
|
|
3
2
|
import { type RequestAction } from '../request-action-implementation.js';
|
|
3
|
+
import type { RestApiImplementation } from '../rest-api-runtime.js';
|
|
4
4
|
/**
|
|
5
5
|
* Generates a RequestAction that retrieves the OpenAPI document from a FuryStack API implementation.
|
|
6
6
|
* When authentication providers are configured (via `useHttpAuthentication` / `useJwtAuthentication`),
|
|
@@ -12,18 +12,4 @@ import { type RequestAction } from '../request-action-implementation.js';
|
|
|
12
12
|
export declare const CreateGetOpenApiDocumentAction: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
|
|
13
13
|
result: OpenApiDocument;
|
|
14
14
|
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Generates a backward-compatible `/swagger.json` endpoint that serves the same OpenAPI document
|
|
17
|
-
* as `CreateGetOpenApiDocumentAction` but includes `Deprecation` and `Link` headers
|
|
18
|
-
* directing clients to use `/openapi.json` instead.
|
|
19
|
-
*
|
|
20
|
-
* @deprecated Use CreateGetOpenApiDocumentAction and `/openapi.json` instead.
|
|
21
|
-
*/
|
|
22
|
-
export declare const CreateDeprecatedSwaggerRedirect: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
|
|
23
|
-
result: OpenApiDocument;
|
|
24
|
-
}>;
|
|
25
|
-
/** @deprecated Use CreateGetOpenApiDocumentAction instead */
|
|
26
|
-
export declare const CreateGetSwaggerJsonAction: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
|
|
27
|
-
result: OpenApiDocument;
|
|
28
|
-
}>;
|
|
29
15
|
//# sourceMappingURL=create-get-openapi-document-action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-openapi-document-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,eAAe,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-get-openapi-document-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,eAAe,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAM1G,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAsBnE;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EACrF,KAAK,CAAC,EACN,aAAsB,EACtB,oBAAqE,EACrE,gBAAiB,KAChB,aAAa,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAgB3C,CAAA"}
|
|
@@ -5,7 +5,7 @@ import { generateOpenApiDocument } from '../openapi/generate-openapi-document.js
|
|
|
5
5
|
import { JsonResult } from '../request-action-implementation.js';
|
|
6
6
|
const getSecuritySchemesFromInjector = (injector) => {
|
|
7
7
|
try {
|
|
8
|
-
const settings = injector.
|
|
8
|
+
const settings = injector.get(HttpAuthenticationSettings);
|
|
9
9
|
if (settings.authenticationProviders.length > 0) {
|
|
10
10
|
return mapProvidersToSecuritySchemes(settings.authenticationProviders);
|
|
11
11
|
}
|
|
@@ -35,27 +35,4 @@ export const CreateGetOpenApiDocumentAction = (api, name = 'FuryStack API', desc
|
|
|
35
35
|
return JsonResult(cachedDoc, 200);
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
|
-
/**
|
|
39
|
-
* Generates a backward-compatible `/swagger.json` endpoint that serves the same OpenAPI document
|
|
40
|
-
* as `CreateGetOpenApiDocumentAction` but includes `Deprecation` and `Link` headers
|
|
41
|
-
* directing clients to use `/openapi.json` instead.
|
|
42
|
-
*
|
|
43
|
-
* @deprecated Use CreateGetOpenApiDocumentAction and `/openapi.json` instead.
|
|
44
|
-
*/
|
|
45
|
-
export const CreateDeprecatedSwaggerRedirect = (api, name = 'FuryStack API', description = 'API documentation generated from FuryStack API schema', version = '1.0.0') => {
|
|
46
|
-
const { endpoints } = getSchemaFromApi({ api, name, description, version });
|
|
47
|
-
let cachedDoc;
|
|
48
|
-
return async ({ injector }) => {
|
|
49
|
-
if (!cachedDoc) {
|
|
50
|
-
const securitySchemes = getSecuritySchemesFromInjector(injector);
|
|
51
|
-
cachedDoc = buildOpenApiDoc(endpoints, name, description, version, securitySchemes ? { securitySchemes } : undefined);
|
|
52
|
-
}
|
|
53
|
-
return JsonResult(cachedDoc, 200, {
|
|
54
|
-
Deprecation: 'true',
|
|
55
|
-
Link: '</openapi.json>; rel="successor-version"',
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
/** @deprecated Use CreateGetOpenApiDocumentAction instead */
|
|
60
|
-
export const CreateGetSwaggerJsonAction = CreateGetOpenApiDocumentAction;
|
|
61
38
|
//# sourceMappingURL=create-get-openapi-document-action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-openapi-document-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-get-openapi-document-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAA;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACjF,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAGpF,MAAM,8BAA8B,GAAG,CAAC,QAAkB,EAAoD,EAAE;IAC9G,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;QACzD,IAAI,QAAQ,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,6BAA6B,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,SAA2D,EAC3D,IAAY,EACZ,WAAmB,EACnB,OAAe,EACf,QAA8B,EACb,EAAE,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;AAE9G;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,GAAM,EACN,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,EAC2B,EAAE;IAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;IAC3E,IAAI,SAAsC,CAAA;IAC1C,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAA;YAChE,SAAS,GAAG,eAAe,CACzB,SAAS,EACT,IAAI,EACJ,WAAW,EACX,OAAO,EACP,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAClD,CAAA;QACH,CAAC;QACD,OAAO,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { RestApiImplementation } from '../api-manager.js';
|
|
2
1
|
import { getSchemaFromApi } from '../get-schema-from-api.js';
|
|
3
2
|
import { type RequestAction } from '../request-action-implementation.js';
|
|
3
|
+
import type { RestApiImplementation } from '../rest-api-runtime.js';
|
|
4
4
|
export type GetSchemaResult = ReturnType<typeof getSchemaFromApi>;
|
|
5
5
|
/**
|
|
6
6
|
* Creates a GET action that returns the schema of the provided API.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-schema-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-schema-action.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"create-get-schema-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-schema-action.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,qBAAqB,CAAC,GAAG,CAAC,EACxE,KAAK,CAAC,EACN,aAAsB,EACtB,oBAAqE,EACrE,gBAAiB,KAChB,aAAa,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAQ3C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-get-schema-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-schema-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-get-schema-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-schema-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAKpF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,GAAM,EACN,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,EAC2B,EAAE;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;IACpE,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAChE,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;QACD,MAAM,IAAI,YAAY,CAAC,oFAAoF,EAAE,GAAG,CAAC,CAAA;IACnH,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
import type { Constructable } from '@furystack/inject';
|
|
2
|
-
import type { PatchEndpoint } from '@furystack/rest';
|
|
3
|
-
import '@furystack/repository';
|
|
4
|
-
import type { RequestAction } from '../request-action-implementation.js';
|
|
5
1
|
import type { WithOptionalId } from '@furystack/core';
|
|
2
|
+
import type { DataSetToken } from '@furystack/repository';
|
|
3
|
+
import type { PatchEndpoint } from '@furystack/rest';
|
|
4
|
+
import { type RequestAction } from '../request-action-implementation.js';
|
|
6
5
|
/**
|
|
7
|
-
* Creates a PATCH endpoint
|
|
8
|
-
*
|
|
9
|
-
* @
|
|
10
|
-
* @param options.primaryKey The field name that is used as primary key on the model
|
|
11
|
-
* @returns a boolean that indicates the success
|
|
6
|
+
* Creates a PATCH endpoint that applies a partial update to an entity
|
|
7
|
+
* identified by the URL's `:id` parameter. The DataSet is resolved from the
|
|
8
|
+
* supplied {@link DataSetToken}.
|
|
12
9
|
*/
|
|
13
|
-
export declare const createPatchEndpoint: <T extends object, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>>(
|
|
14
|
-
model: Constructable<T>;
|
|
15
|
-
primaryKey: TPrimaryKey;
|
|
16
|
-
}) => RequestAction<PatchEndpoint<T, TPrimaryKey, TWritableData>>;
|
|
10
|
+
export declare const createPatchEndpoint: <T extends object, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>>(dataSet: DataSetToken<T, TPrimaryKey, TWritableData>) => RequestAction<PatchEndpoint<T, TPrimaryKey, TWritableData>>;
|
|
17
11
|
//# sourceMappingURL=create-patch-endpoint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-patch-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"create-patch-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,CAAC,SAAS,MAAM,EAChB,WAAW,SAAS,MAAM,CAAC,EAC3B,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAE9C,SAAS,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,KACnD,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAQ5D,CAAA"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
import '@furystack/repository';
|
|
2
|
-
import { JsonResult } from '../request-action-implementation.js';
|
|
3
|
-
import { getRepository } from '@furystack/repository';
|
|
4
1
|
import { readPostBody } from '../read-post-body.js';
|
|
2
|
+
import { JsonResult } from '../request-action-implementation.js';
|
|
5
3
|
/**
|
|
6
|
-
* Creates a PATCH endpoint
|
|
7
|
-
*
|
|
8
|
-
* @
|
|
9
|
-
* @param options.primaryKey The field name that is used as primary key on the model
|
|
10
|
-
* @returns a boolean that indicates the success
|
|
4
|
+
* Creates a PATCH endpoint that applies a partial update to an entity
|
|
5
|
+
* identified by the URL's `:id` parameter. The DataSet is resolved from the
|
|
6
|
+
* supplied {@link DataSetToken}.
|
|
11
7
|
*/
|
|
12
|
-
export const createPatchEndpoint = (
|
|
13
|
-
|
|
8
|
+
export const createPatchEndpoint = (dataSet) => {
|
|
9
|
+
return async ({ injector, request, getUrlParams }) => {
|
|
14
10
|
const { id } = getUrlParams();
|
|
15
11
|
const patchData = await readPostBody(request);
|
|
16
|
-
const
|
|
17
|
-
await
|
|
12
|
+
const ds = injector.get(dataSet);
|
|
13
|
+
await ds.update(injector, id, patchData);
|
|
18
14
|
return JsonResult({});
|
|
19
15
|
};
|
|
20
|
-
return endpoint;
|
|
21
16
|
};
|
|
22
17
|
//# sourceMappingURL=create-patch-endpoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-patch-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-patch-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAKjC,OAAoD,EACS,EAAE;IAC/D,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE;QACnD,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,SAAS,GAAG,MAAM,YAAY,CAAI,OAAO,CAAC,CAAA;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QACxC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC,CAAA;AACH,CAAC,CAAA"}
|