@equinor/fusion-framework-module-services 0.1.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 (88) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/esm/configurator.js +3 -0
  3. package/dist/esm/configurator.js.map +1 -0
  4. package/dist/esm/context/api-models.js +2 -0
  5. package/dist/esm/context/api-models.js.map +1 -0
  6. package/dist/esm/context/client.js +22 -0
  7. package/dist/esm/context/client.js.map +1 -0
  8. package/dist/esm/context/get/client.js +4 -0
  9. package/dist/esm/context/get/client.js.map +1 -0
  10. package/dist/esm/context/get/generate-endpoint.js +18 -0
  11. package/dist/esm/context/get/generate-endpoint.js.map +1 -0
  12. package/dist/esm/context/get/generate-parameters.js +7 -0
  13. package/dist/esm/context/get/generate-parameters.js.map +1 -0
  14. package/dist/esm/context/get/index.js +6 -0
  15. package/dist/esm/context/get/index.js.map +1 -0
  16. package/dist/esm/context/get/types.js +2 -0
  17. package/dist/esm/context/get/types.js.map +1 -0
  18. package/dist/esm/context/index.js +5 -0
  19. package/dist/esm/context/index.js.map +1 -0
  20. package/dist/esm/context/query/client.js +4 -0
  21. package/dist/esm/context/query/client.js.map +1 -0
  22. package/dist/esm/context/query/generate-endpoint.js +47 -0
  23. package/dist/esm/context/query/generate-endpoint.js.map +1 -0
  24. package/dist/esm/context/query/generate-parameters.js +7 -0
  25. package/dist/esm/context/query/generate-parameters.js.map +1 -0
  26. package/dist/esm/context/query/index.js +6 -0
  27. package/dist/esm/context/query/index.js.map +1 -0
  28. package/dist/esm/context/query/types.js +2 -0
  29. package/dist/esm/context/query/types.js.map +1 -0
  30. package/dist/esm/context/static.js +6 -0
  31. package/dist/esm/context/static.js.map +1 -0
  32. package/dist/esm/context/types.js +2 -0
  33. package/dist/esm/context/types.js.map +1 -0
  34. package/dist/esm/errors.js +7 -0
  35. package/dist/esm/errors.js.map +1 -0
  36. package/dist/esm/index.js +5 -0
  37. package/dist/esm/index.js.map +1 -0
  38. package/dist/esm/module.js +51 -0
  39. package/dist/esm/module.js.map +1 -0
  40. package/dist/esm/provider.js +30 -0
  41. package/dist/esm/provider.js.map +1 -0
  42. package/dist/esm/types.js +2 -0
  43. package/dist/esm/types.js.map +1 -0
  44. package/dist/tsconfig.tsbuildinfo +1 -0
  45. package/dist/types/configurator.d.ts +6 -0
  46. package/dist/types/context/api-models.d.ts +31 -0
  47. package/dist/types/context/client.d.ts +13 -0
  48. package/dist/types/context/get/client.d.ts +4 -0
  49. package/dist/types/context/get/generate-endpoint.d.ts +2 -0
  50. package/dist/types/context/get/generate-parameters.d.ts +4 -0
  51. package/dist/types/context/get/index.d.ts +5 -0
  52. package/dist/types/context/get/types.d.ts +19 -0
  53. package/dist/types/context/index.d.ts +4 -0
  54. package/dist/types/context/query/client.d.ts +4 -0
  55. package/dist/types/context/query/generate-endpoint.d.ts +3 -0
  56. package/dist/types/context/query/generate-parameters.d.ts +4 -0
  57. package/dist/types/context/query/index.d.ts +5 -0
  58. package/dist/types/context/query/types.d.ts +32 -0
  59. package/dist/types/context/static.d.ts +4 -0
  60. package/dist/types/context/types.d.ts +1 -0
  61. package/dist/types/errors.d.ts +4 -0
  62. package/dist/types/index.d.ts +5 -0
  63. package/dist/types/module.d.ts +20 -0
  64. package/dist/types/provider.d.ts +22 -0
  65. package/dist/types/types.d.ts +13 -0
  66. package/package.json +60 -0
  67. package/src/configurator.ts +8 -0
  68. package/src/context/api-models.ts +42 -0
  69. package/src/context/client.ts +49 -0
  70. package/src/context/get/client.ts +33 -0
  71. package/src/context/get/generate-endpoint.ts +25 -0
  72. package/src/context/get/generate-parameters.ts +23 -0
  73. package/src/context/get/index.ts +8 -0
  74. package/src/context/get/types.ts +52 -0
  75. package/src/context/index.ts +6 -0
  76. package/src/context/query/client.ts +35 -0
  77. package/src/context/query/generate-endpoint.ts +65 -0
  78. package/src/context/query/generate-parameters.ts +23 -0
  79. package/src/context/query/index.ts +8 -0
  80. package/src/context/query/types.ts +63 -0
  81. package/src/context/static.ts +6 -0
  82. package/src/context/types.ts +5 -0
  83. package/src/errors.ts +5 -0
  84. package/src/index.ts +6 -0
  85. package/src/module.ts +101 -0
  86. package/src/provider.ts +51 -0
  87. package/src/types.ts +41 -0
  88. package/tsconfig.json +38 -0
@@ -0,0 +1,31 @@
1
+ import { ApiVersion } from './static';
2
+ declare type ApiContextEntity_v1 = {
3
+ id: string;
4
+ externalId: string | null;
5
+ source: string | null;
6
+ type: ApiContextType_v1;
7
+ value: Record<string, unknown> | null;
8
+ title: string | null;
9
+ isActive: boolean;
10
+ isDeleted: boolean;
11
+ created: string;
12
+ updated: string | null;
13
+ };
14
+ declare type ApiContextEntity_v2 = unknown;
15
+ declare type ApiContextEntityTypes = {
16
+ [ApiVersion.v1]: ApiContextEntity_v1;
17
+ [ApiVersion.v2]: ApiContextEntity_v2;
18
+ };
19
+ export declare type ApiContextEntity<T extends string = ApiVersion> = T extends ApiVersion ? ApiContextEntityTypes[T] : unknown;
20
+ declare type ApiContextType_v1 = {
21
+ id: string;
22
+ isChildType: boolean;
23
+ parentTypeIds: string[] | null;
24
+ };
25
+ declare type ApiContextType_v2 = unknown;
26
+ declare type ApiContextTypeTypes = {
27
+ [ApiVersion.v1]: ApiContextType_v1;
28
+ [ApiVersion.v2]: ApiContextType_v2;
29
+ };
30
+ export declare type ApiContextType<T extends ApiVersion> = ApiContextTypeTypes[T];
31
+ export {};
@@ -0,0 +1,13 @@
1
+ import { IHttpClient } from '@equinor/fusion-framework-module-http';
2
+ import { ClientMethod, ApiVersion } from '@equinor/fusion-framework-module-services/context';
3
+ import { GetContextFn, GetContextResponse, GetContextResult } from './get';
4
+ import { QueryContextFn, QueryContextResponse, QueryContextResult } from './query';
5
+ export declare class ContextApiClient<TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TClient extends IHttpClient = IHttpClient> {
6
+ protected _client: TClient;
7
+ protected _method: TMethod;
8
+ get Version(): typeof ApiVersion;
9
+ constructor(_client: TClient, _method: TMethod);
10
+ get<TVersion extends string = keyof typeof ApiVersion, TResult = GetContextResponse<TVersion>>(version: TVersion, ...args: Parameters<GetContextFn<TVersion, TMethod, TClient, TResult>>): GetContextResult<TVersion, TMethod, TResult>;
11
+ query<TVersion extends string = keyof typeof ApiVersion, TResult = QueryContextResponse<TVersion>>(version: TVersion, ...args: Parameters<QueryContextFn<TVersion, TMethod, TClient, TResult>>): QueryContextResult<TVersion, TMethod, TResult>;
12
+ }
13
+ export default ContextApiClient;
@@ -0,0 +1,4 @@
1
+ import { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+ import type { ClientMethod, GetContextArgs, GetContextResponse, GetContextResult } from './types';
3
+ export declare const getContext: <TVersion extends string = "v1" | "v2", TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TClient extends IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response> = IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response>>(client: TClient, version: TVersion, method?: TMethod) => <T = GetContextResponse<TVersion>>(args: GetContextArgs<TVersion>, init?: ClientRequestInit<TClient, T> | undefined) => GetContextResult<TVersion, TMethod, T>;
4
+ export default getContext;
@@ -0,0 +1,2 @@
1
+ import type { GetContextArgs } from './types';
2
+ export declare const generateEndpoint: <TVersion extends string = "v1" | "v2">(version: TVersion, args: GetContextArgs<TVersion>) => string;
@@ -0,0 +1,4 @@
1
+ import type { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+ import type { ApiClientArguments, GetContextArgs } from './types';
3
+ export declare const generateParameters: <TResult, TVersion extends string = "v1" | "v2", TClient extends IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response> = IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response>>(version: TVersion, args: GetContextArgs<TVersion>, init?: ClientRequestInit<TClient, TResult> | undefined) => ApiClientArguments<TClient, TResult>;
4
+ export default generateParameters;
@@ -0,0 +1,5 @@
1
+ export { ApiVersion } from '@equinor/fusion-framework-module-services/context';
2
+ export { generateEndpoint } from './generate-endpoint';
3
+ export { generateParameters } from './generate-parameters';
4
+ export * from './types';
5
+ export { getContext, default } from './client';
@@ -0,0 +1,19 @@
1
+ import { IHttpClient, ClientRequestInit } from '@equinor/fusion-framework-module-http/client';
2
+ import { ApiVersion, ApiContextEntity, ClientMethod } from '@equinor/fusion-framework-module-services/context';
3
+ export { ApiClientArguments, ClientMethod, } from '@equinor/fusion-framework-module-services/context';
4
+ declare type GetContextArgs_v1 = {
5
+ id: string;
6
+ };
7
+ declare type GetContextArgs_v2 = GetContextArgs_v1;
8
+ declare type GetContextArgsTypes = {
9
+ [ApiVersion.v1]: GetContextArgs_v1;
10
+ [ApiVersion.v2]: GetContextArgs_v2;
11
+ };
12
+ export declare type GetContextArgs<T extends string> = T extends keyof typeof ApiVersion ? GetContextArgsTypes[typeof ApiVersion[T]] : unknown;
13
+ declare type GetContextResponseTypes = {
14
+ [ApiVersion.v1]: ApiContextEntity<ApiVersion.v1>;
15
+ [ApiVersion.v2]: ApiContextEntity<ApiVersion.v2>;
16
+ };
17
+ export declare type GetContextResponse<T> = T extends keyof typeof ApiVersion ? GetContextResponseTypes[typeof ApiVersion[T]] : unknown;
18
+ export declare type GetContextFn<TVersion extends string = keyof typeof ApiVersion, TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TClient extends IHttpClient = IHttpClient, TResult = GetContextResponse<TVersion>> = (args: GetContextArgs<TVersion>, init?: ClientRequestInit<TClient, TResult>) => GetContextResult<TVersion, TMethod, TResult>;
19
+ export declare type GetContextResult<TVersion extends string = keyof typeof ApiVersion, TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TResult = GetContextResponse<TVersion>> = ClientMethod<TResult>[TMethod];
@@ -0,0 +1,4 @@
1
+ export { ContextApiClient, default } from './client';
2
+ export { ApiVersion } from './static';
3
+ export * from './api-models';
4
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ import { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+ import type { QueryContextArgs, QueryContextResponse, QueryContextResult, ClientMethod } from './types';
3
+ export declare const queryContext: <TVersion extends string = "v1" | "v2", TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TClient extends IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response> = IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response>>(client: TClient, version: TVersion, method?: TMethod) => <T = QueryContextResponse<TVersion>>(args: QueryContextArgs<TVersion>, init?: ClientRequestInit<TClient, T> | undefined) => QueryContextResult<TVersion, TMethod, T>;
4
+ export default queryContext;
@@ -0,0 +1,3 @@
1
+ import type { QueryContextArgs } from './types';
2
+ export declare const generateEndpoint: <TVersion extends string = "v1" | "v2">(version: TVersion, args: QueryContextArgs<TVersion>) => string;
3
+ export default generateEndpoint;
@@ -0,0 +1,4 @@
1
+ import { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+ import type { QueryContextArgs, ApiClientArguments } from './types';
3
+ export declare const generateParameters: <TResult, TVersion extends string = "v1" | "v2", TClient extends IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response> = IHttpClient<import("@equinor/fusion-framework-module-http/client").FetchRequest, Response>>(version: TVersion, args: QueryContextArgs<TVersion>, init?: ClientRequestInit<TClient, TResult> | undefined) => ApiClientArguments<TClient, TResult>;
4
+ export default generateParameters;
@@ -0,0 +1,5 @@
1
+ export { ApiVersion, ApiContextEntity } from '@equinor/fusion-framework-module-services/context';
2
+ export { generateEndpoint } from './generate-endpoint';
3
+ export { generateParameters } from './generate-parameters';
4
+ export * from './types';
5
+ export { queryContext, default } from './client';
@@ -0,0 +1,32 @@
1
+ import { IHttpClient, ClientRequestInit } from '@equinor/fusion-framework-module-http/client';
2
+ import { ApiVersion, ApiContextEntity, ClientMethod } from '@equinor/fusion-framework-module-services/context';
3
+ export { ApiClientArguments, ClientMethod, } from '@equinor/fusion-framework-module-services/context';
4
+ export declare type QueryContextOdataFilter = {
5
+ type?: string[];
6
+ externalId?: string;
7
+ };
8
+ export declare type QueryContextOdataParameters = {
9
+ search?: string;
10
+ filter?: QueryContextOdataFilter;
11
+ };
12
+ declare type QueryContextArgs_v1 = {
13
+ query: string | QueryContextOdataParameters;
14
+ includeDeleted?: boolean;
15
+ };
16
+ declare type QueryContextArgs_v2 = QueryContextArgs_v1;
17
+ declare type SearchContextArgTypes = {
18
+ [ApiVersion.v1]: QueryContextArgs_v1;
19
+ [ApiVersion.v2]: QueryContextArgs_v2;
20
+ };
21
+ export declare type QueryContextArgs<T> = T extends keyof typeof ApiVersion ? SearchContextArgTypes[typeof ApiVersion[T]] : {
22
+ query: {
23
+ search: string;
24
+ };
25
+ };
26
+ declare type QueryContextResponseTypes = {
27
+ [ApiVersion.v1]: Array<ApiContextEntity<ApiVersion.v1>>;
28
+ [ApiVersion.v2]: Array<ApiContextEntity<ApiVersion.v2>>;
29
+ };
30
+ export declare type QueryContextResponse<T> = T extends keyof typeof ApiVersion ? QueryContextResponseTypes[typeof ApiVersion[T]] : unknown;
31
+ export declare type QueryContextFn<TVersion extends string = keyof typeof ApiVersion, TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TClient extends IHttpClient = IHttpClient, TResult = QueryContextResponse<TVersion>> = (args: QueryContextArgs<TVersion>, init?: ClientRequestInit<TClient, TResult>) => QueryContextResult<TVersion, TMethod, TResult>;
32
+ export declare type QueryContextResult<TVersion extends string = keyof typeof ApiVersion, TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>, TResult = QueryContextResponse<TVersion>> = ClientMethod<TResult>[TMethod];
@@ -0,0 +1,4 @@
1
+ export declare enum ApiVersion {
2
+ 'v1' = "1.0",
3
+ 'v2' = "2.0"
4
+ }
@@ -0,0 +1 @@
1
+ export { ClientMethodType, ClientMethod, ApiClientArguments, } from '@equinor/fusion-framework-module-services';
@@ -0,0 +1,4 @@
1
+ export declare class UnsupportedApiVersion extends Error {
2
+ readonly version: string | number;
3
+ constructor(version: string | number, cause?: unknown);
4
+ }
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export type { ServicesModule, ServicesModuleKey } from './module';
3
+ export { ApiConfigurator, IApiConfigurator } from './configurator';
4
+ export { ApiProvider, IApiProvider, Service } from './provider';
5
+ export { default, module, enableServices, configureServices } from './module';
@@ -0,0 +1,20 @@
1
+ import type { IModuleConfigurator, IModulesConfigurator, Module } from '@equinor/fusion-framework-module';
2
+ import type { HttpModule } from '@equinor/fusion-framework-module-http';
3
+ import type { ServiceDiscoveryModule } from '@equinor/fusion-framework-module-service-discovery';
4
+ import { IApiConfigurator } from './configurator';
5
+ import { IApiProvider } from './provider';
6
+ export declare type ServicesModuleKey = 'services';
7
+ export declare const moduleKey: ServicesModuleKey;
8
+ export declare type ServicesModule = Module<ServicesModuleKey, IApiProvider, IApiConfigurator, [
9
+ HttpModule,
10
+ ServiceDiscoveryModule
11
+ ]>;
12
+ export declare const module: ServicesModule;
13
+ export declare const enableServices: (config: IModulesConfigurator) => void;
14
+ export declare const configureServices: (configure: (configurator: IApiConfigurator) => void) => IModuleConfigurator<ServicesModule>;
15
+ declare module '@equinor/fusion-framework-module' {
16
+ interface Modules {
17
+ services: ServicesModule;
18
+ }
19
+ }
20
+ export default module;
@@ -0,0 +1,22 @@
1
+ import { IHttpClient } from '@equinor/fusion-framework-module-http';
2
+ import { ClientMethod } from './types';
3
+ import { ApiClientFactory } from './types';
4
+ import { ContextApiClient } from './context';
5
+ export declare enum Service {
6
+ Context = "context"
7
+ }
8
+ declare type ApiServices<TMethod extends keyof ClientMethod, TClient extends IHttpClient> = {
9
+ [Service.Context]: ContextApiClient<TMethod, TClient>;
10
+ };
11
+ export interface IApiProvider<TClient extends IHttpClient = IHttpClient> {
12
+ createApiClient<TService extends Service, TMethod extends keyof ClientMethod>(name: TService, version: TMethod): Promise<ApiServices<TMethod, TClient>[TService]>;
13
+ }
14
+ declare type ApiProviderCtorArgs<TClient extends IHttpClient = IHttpClient> = {
15
+ createClient: ApiClientFactory<TClient>;
16
+ };
17
+ export declare class ApiProvider<TClient extends IHttpClient = IHttpClient> implements IApiProvider<TClient> {
18
+ protected _createClientFn: ApiClientFactory<TClient>;
19
+ constructor({ createClient }: ApiProviderCtorArgs<TClient>);
20
+ createApiClient<TService extends Service, TMethod extends keyof ClientMethod>(name: TService, method: TMethod): Promise<ApiServices<TMethod, TClient>[TService]>;
21
+ }
22
+ export {};
@@ -0,0 +1,13 @@
1
+ import { ClientRequestInit, IHttpClient, FetchResponse, StreamResponse } from '@equinor/fusion-framework-module-http/client';
2
+ export declare type ApiClientFactory<TClient extends IHttpClient = IHttpClient> = (name: string) => Promise<TClient>;
3
+ export declare type ApiClientArguments<TClient extends IHttpClient, TResult = unknown> = [
4
+ path: string,
5
+ init?: ClientRequestInit<TClient, TResult>
6
+ ];
7
+ export declare type ClientMethod<T = unknown> = {
8
+ fetch: Promise<FetchResponse<T>>;
9
+ json: Promise<T>;
10
+ fetch$: StreamResponse<FetchResponse<T>>;
11
+ json$: StreamResponse<T>;
12
+ };
13
+ export declare type ClientMethodType = keyof ClientMethod;
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@equinor/fusion-framework-module-services",
3
+ "version": "0.1.0",
4
+ "description": "",
5
+ "sideEffects": false,
6
+ "main": "dist/esm/index.js",
7
+ "types": "index.d.ts",
8
+ "typesVersions": {
9
+ ">=4.2": {
10
+ "*": [
11
+ "dist/types/*"
12
+ ],
13
+ "context": [
14
+ "dist/types/context/index"
15
+ ],
16
+ "context/get": [
17
+ "dist/types/context/get/index"
18
+ ],
19
+ "context/query": [
20
+ "dist/types/context/query/index"
21
+ ]
22
+ }
23
+ },
24
+ "exports": {
25
+ ".": "./dist/esm/index.js",
26
+ "./context": "./dist/esm/context/index.js",
27
+ "./context/get": "./dist/esm/context/get-context/index.js",
28
+ "./errors": "./dist/esm/errors.js",
29
+ "./package.json": "./package.json"
30
+ },
31
+ "scripts": {
32
+ "build": "npm run build:typescript",
33
+ "build:typescript": "tsc -b --verbose",
34
+ "prepack": "npm run build"
35
+ },
36
+ "keywords": [],
37
+ "author": "",
38
+ "license": "ISC",
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/equinor/fusion-framework.git",
45
+ "directory": "packages/module-services"
46
+ },
47
+ "dependencies": {
48
+ "odata-query": "^7.0.3"
49
+ },
50
+ "devDependencies": {
51
+ "@equinor/fusion-framework-module": "^1.1.3",
52
+ "@equinor/fusion-framework-module-http": "^2.0.10",
53
+ "@equinor/fusion-framework-module-service-discovery": "^1.0.7"
54
+ },
55
+ "peerDependencies": {
56
+ "@equinor/fusion-framework-module": "^1.1.3",
57
+ "odata-query": "^7.0.3"
58
+ },
59
+ "gitHead": "8b7efac3ab5b1db6531a89b884714dd90cb482e8"
60
+ }
@@ -0,0 +1,8 @@
1
+ import { ApiClientFactory } from './types';
2
+
3
+ export interface IApiConfigurator {
4
+ /** Method for creating IHttpClients */
5
+ createClient?: ApiClientFactory;
6
+ }
7
+
8
+ export class ApiConfigurator implements IApiConfigurator {}
@@ -0,0 +1,42 @@
1
+ import { ApiVersion } from './static';
2
+
3
+ type ApiContextEntity_v1 = {
4
+ id: string;
5
+ externalId: string | null;
6
+ source: string | null;
7
+ type: ApiContextType_v1;
8
+ value: Record<string, unknown> | null;
9
+ title: string | null;
10
+ isActive: boolean;
11
+ isDeleted: boolean;
12
+ created: string;
13
+ updated: string | null;
14
+ };
15
+
16
+ type ApiContextEntity_v2 = unknown;
17
+
18
+ type ApiContextEntityTypes = {
19
+ [ApiVersion.v1]: ApiContextEntity_v1;
20
+ [ApiVersion.v2]: ApiContextEntity_v2;
21
+ };
22
+
23
+ export type ApiContextEntity<T extends string = ApiVersion> = T extends ApiVersion
24
+ ? ApiContextEntityTypes[T]
25
+ : unknown;
26
+
27
+ /** === types === */
28
+
29
+ type ApiContextType_v1 = {
30
+ id: string;
31
+ isChildType: boolean;
32
+ parentTypeIds: string[] | null;
33
+ };
34
+
35
+ type ApiContextType_v2 = unknown;
36
+
37
+ type ApiContextTypeTypes = {
38
+ [ApiVersion.v1]: ApiContextType_v1;
39
+ [ApiVersion.v2]: ApiContextType_v2;
40
+ };
41
+
42
+ export type ApiContextType<T extends ApiVersion> = ApiContextTypeTypes[T];
@@ -0,0 +1,49 @@
1
+ import { IHttpClient } from '@equinor/fusion-framework-module-http';
2
+
3
+ import { ClientMethod, ApiVersion } from '@equinor/fusion-framework-module-services/context';
4
+
5
+ import { getContext, GetContextFn, GetContextResponse, GetContextResult } from './get';
6
+ import { queryContext, QueryContextFn, QueryContextResponse, QueryContextResult } from './query';
7
+
8
+ export class ContextApiClient<
9
+ TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
10
+ TClient extends IHttpClient = IHttpClient
11
+ > {
12
+ get Version(): typeof ApiVersion {
13
+ return ApiVersion;
14
+ }
15
+
16
+ constructor(protected _client: TClient, protected _method: TMethod) {}
17
+
18
+ /**
19
+ * Fetch context by id
20
+ * @see {@link get/client}
21
+ */
22
+ public get<
23
+ TVersion extends string = keyof typeof ApiVersion,
24
+ TResult = GetContextResponse<TVersion>
25
+ >(
26
+ version: TVersion,
27
+ ...args: Parameters<GetContextFn<TVersion, TMethod, TClient, TResult>>
28
+ ): GetContextResult<TVersion, TMethod, TResult> {
29
+ const fn = getContext<TVersion, TMethod, TClient>(this._client, version, this._method);
30
+ return fn<TResult>(...args);
31
+ }
32
+
33
+ /**
34
+ * Query context service
35
+ * @see {@link query/client}
36
+ */
37
+ public query<
38
+ TVersion extends string = keyof typeof ApiVersion,
39
+ TResult = QueryContextResponse<TVersion>
40
+ >(
41
+ version: TVersion,
42
+ ...args: Parameters<QueryContextFn<TVersion, TMethod, TClient, TResult>>
43
+ ): QueryContextResult<TVersion, TMethod, TResult> {
44
+ const fn = queryContext<TVersion, TMethod, TClient>(this._client, version, this._method);
45
+ return fn<TResult>(...args);
46
+ }
47
+ }
48
+
49
+ export default ContextApiClient;
@@ -0,0 +1,33 @@
1
+ import { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+
3
+ import { ApiVersion } from '@equinor/fusion-framework-module-services/context';
4
+
5
+ import { generateParameters } from './generate-parameters';
6
+
7
+ import type { ClientMethod, GetContextArgs, GetContextResponse, GetContextResult } from './types';
8
+
9
+ /**
10
+ * Method for fetching context item from context service
11
+ * @param client - client for execution of request
12
+ * @param version - version of API to call
13
+ * @param method - client method to call
14
+ */
15
+ export const getContext =
16
+ <
17
+ TVersion extends string = keyof typeof ApiVersion,
18
+ TMethod extends keyof ClientMethod = keyof ClientMethod,
19
+ TClient extends IHttpClient = IHttpClient
20
+ >(
21
+ client: TClient,
22
+ version: TVersion,
23
+ method: TMethod = 'json' as TMethod
24
+ ) =>
25
+ <T = GetContextResponse<TVersion>>(
26
+ args: GetContextArgs<TVersion>,
27
+ init?: ClientRequestInit<TClient, T>
28
+ ): GetContextResult<TVersion, TMethod, T> =>
29
+ client[method](
30
+ ...generateParameters<T, TVersion, TClient>(version, args, init)
31
+ ) as GetContextResult<TVersion, TMethod, T>;
32
+
33
+ export default getContext;
@@ -0,0 +1,25 @@
1
+ import { UnsupportedApiVersion } from '@equinor/fusion-framework-module-services/errors';
2
+ import { ApiVersion } from '@equinor/fusion-framework-module-services/context';
3
+
4
+ import type { GetContextArgs } from './types';
5
+
6
+ /**
7
+ * Method for generating endpoint for getting context by id
8
+ */
9
+ export const generateEndpoint = <TVersion extends string = keyof typeof ApiVersion>(
10
+ version: TVersion,
11
+ args: GetContextArgs<TVersion>
12
+ ) => {
13
+ const apiVersion = ApiVersion[version as keyof typeof ApiVersion] ?? version;
14
+ switch (apiVersion) {
15
+ case ApiVersion.v2:
16
+ throw new UnsupportedApiVersion(version);
17
+ case ApiVersion.v1:
18
+ default: {
19
+ const { id } = args as { id: string };
20
+ const params = new URLSearchParams();
21
+ params.append('api-version', apiVersion);
22
+ return `/contexts/${id}/?${String(params)}`;
23
+ }
24
+ }
25
+ };
@@ -0,0 +1,23 @@
1
+ import type { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+
3
+ import { ApiVersion } from '@equinor/fusion-framework-module-services/context';
4
+
5
+ import { generateEndpoint } from './generate-endpoint';
6
+
7
+ import type { ApiClientArguments, GetContextArgs } from './types';
8
+
9
+ /** function for creating http client arguments */
10
+ export const generateParameters = <
11
+ TResult,
12
+ TVersion extends string = keyof typeof ApiVersion,
13
+ TClient extends IHttpClient = IHttpClient
14
+ >(
15
+ version: TVersion,
16
+ args: GetContextArgs<TVersion>,
17
+ init?: ClientRequestInit<TClient, TResult>
18
+ ): ApiClientArguments<TClient, TResult> => {
19
+ const path = generateEndpoint(version, args);
20
+ return [path, init];
21
+ };
22
+
23
+ export default generateParameters;
@@ -0,0 +1,8 @@
1
+ export { ApiVersion } from '@equinor/fusion-framework-module-services/context';
2
+
3
+ export { generateEndpoint } from './generate-endpoint';
4
+ export { generateParameters } from './generate-parameters';
5
+
6
+ export * from './types';
7
+
8
+ export { getContext, default } from './client';
@@ -0,0 +1,52 @@
1
+ import { IHttpClient, ClientRequestInit } from '@equinor/fusion-framework-module-http/client';
2
+
3
+ import {
4
+ ApiVersion,
5
+ ApiContextEntity,
6
+ ClientMethod,
7
+ } from '@equinor/fusion-framework-module-services/context';
8
+
9
+ export {
10
+ ApiClientArguments,
11
+ ClientMethod,
12
+ } from '@equinor/fusion-framework-module-services/context';
13
+
14
+ type GetContextArgs_v1 = {
15
+ id: string;
16
+ };
17
+
18
+ type GetContextArgs_v2 = GetContextArgs_v1;
19
+
20
+ type GetContextArgsTypes = {
21
+ [ApiVersion.v1]: GetContextArgs_v1;
22
+ [ApiVersion.v2]: GetContextArgs_v2;
23
+ };
24
+
25
+ export type GetContextArgs<T extends string> = T extends keyof typeof ApiVersion
26
+ ? GetContextArgsTypes[typeof ApiVersion[T]]
27
+ : unknown;
28
+
29
+ type GetContextResponseTypes = {
30
+ [ApiVersion.v1]: ApiContextEntity<ApiVersion.v1>;
31
+ [ApiVersion.v2]: ApiContextEntity<ApiVersion.v2>;
32
+ };
33
+
34
+ export type GetContextResponse<T> = T extends keyof typeof ApiVersion
35
+ ? GetContextResponseTypes[typeof ApiVersion[T]]
36
+ : unknown;
37
+
38
+ export type GetContextFn<
39
+ TVersion extends string = keyof typeof ApiVersion,
40
+ TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
41
+ TClient extends IHttpClient = IHttpClient,
42
+ TResult = GetContextResponse<TVersion>
43
+ > = (
44
+ args: GetContextArgs<TVersion>,
45
+ init?: ClientRequestInit<TClient, TResult>
46
+ ) => GetContextResult<TVersion, TMethod, TResult>;
47
+
48
+ export type GetContextResult<
49
+ TVersion extends string = keyof typeof ApiVersion,
50
+ TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
51
+ TResult = GetContextResponse<TVersion>
52
+ > = ClientMethod<TResult>[TMethod];
@@ -0,0 +1,6 @@
1
+ export { ContextApiClient, default } from './client';
2
+
3
+ export { ApiVersion } from './static';
4
+
5
+ export * from './api-models';
6
+ export * from './types';
@@ -0,0 +1,35 @@
1
+ import { ClientRequestInit, IHttpClient } from '@equinor/fusion-framework-module-http/client';
2
+
3
+ import { ApiVersion } from '@equinor/fusion-framework-module-services/context';
4
+
5
+ import { generateParameters } from './generate-parameters';
6
+
7
+ import type {
8
+ QueryContextArgs,
9
+ QueryContextResponse,
10
+ QueryContextResult,
11
+ ClientMethod,
12
+ } from './types';
13
+
14
+ /**
15
+ * Function for querying the context service
16
+ */
17
+ export const queryContext =
18
+ <
19
+ TVersion extends string = keyof typeof ApiVersion,
20
+ TMethod extends keyof ClientMethod = keyof ClientMethod,
21
+ TClient extends IHttpClient = IHttpClient
22
+ >(
23
+ client: TClient,
24
+ version: TVersion,
25
+ method: TMethod = 'json' as TMethod
26
+ ) =>
27
+ <T = QueryContextResponse<TVersion>>(
28
+ args: QueryContextArgs<TVersion>,
29
+ init?: ClientRequestInit<TClient, T>
30
+ ): QueryContextResult<TVersion, TMethod, T> =>
31
+ client[method](
32
+ ...generateParameters<T, TVersion, TClient>(version, args, init)
33
+ ) as QueryContextResult<TVersion, TMethod, T>;
34
+
35
+ export default queryContext;