@nx-ddd/hasura 19.0.0-preview.10

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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # hasura
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build hasura` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test hasura` to execute the unit tests via [Jest](https://jestjs.io).
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib';
package/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib"), exports);
5
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/hasura/src/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB"}
@@ -0,0 +1,23 @@
1
+ import { Apollo, ApolloBase } from "apollo-angular";
2
+ import { HasuraConfig } from "./hasura.config";
3
+ import { HttpLink } from 'apollo-angular/http';
4
+ import { ApolloClient } from "@apollo/client/core";
5
+ import { Observable } from "rxjs";
6
+ import { GetHeaders } from "./links";
7
+ export declare class ApolloMultiService {
8
+ readonly apollo: Apollo;
9
+ readonly httpLink: HttpLink;
10
+ protected createClient(name: string, baseUrl: string, getHeaders: GetHeaders): void;
11
+ getClient(endpoint: string, getHeaders: GetHeaders): ApolloBase;
12
+ }
13
+ export type GetApolloClient<E extends {
14
+ id: string;
15
+ }> = (config: HasuraConfig) => ApolloClient<E> | Promise<ApolloClient<E>> | Observable<ApolloClient<E>>;
16
+ export declare const GET_APOLLO_CLIENT: {
17
+ token: import("@angular/core").InjectionToken<GetApolloClient<any>>;
18
+ inject: () => GetApolloClient<any>;
19
+ provide: (useFactory: () => GetApolloClient<any>) => {
20
+ provide: import("@angular/core").InjectionToken<GetApolloClient<any>>;
21
+ useFactory: () => GetApolloClient<any>;
22
+ };
23
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET_APOLLO_CLIENT = exports.ApolloMultiService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@angular/core");
6
+ const apollo_angular_1 = require("apollo-angular");
7
+ const http_1 = require("apollo-angular/http");
8
+ const cache_1 = require("@apollo/client/cache");
9
+ const context_1 = require("@apollo/client/link/context");
10
+ const core_2 = require("@apollo/client/core");
11
+ const utilities_1 = require("@apollo/client/utilities");
12
+ const core_3 = require("@nx-ddd/core");
13
+ const links_1 = require("./links");
14
+ function isSubscription(query) {
15
+ const definition = (0, utilities_1.getMainDefinition)(query);
16
+ return (definition.kind === 'OperationDefinition' &&
17
+ definition.operation === 'subscription');
18
+ }
19
+ let ApolloMultiService = class ApolloMultiService {
20
+ constructor() {
21
+ this.apollo = (0, core_1.inject)(apollo_angular_1.Apollo);
22
+ this.httpLink = (0, core_1.inject)(http_1.HttpLink);
23
+ }
24
+ createClient(name, baseUrl, getHeaders) {
25
+ const wsLink = (0, links_1.buildWebsocketLink)(baseUrl, getHeaders);
26
+ const link = (0, core_2.split)(({ query }) => isSubscription(query), wsLink, core_2.ApolloLink.from([
27
+ (0, context_1.setContext)(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
28
+ const headers = yield (0, links_1.resolve)(() => getHeaders());
29
+ return { headers };
30
+ })),
31
+ this.httpLink.create({ uri: baseUrl, }),
32
+ ]));
33
+ this.apollo.removeClient(name);
34
+ this.apollo.createNamed(name, { link, cache: new cache_1.InMemoryCache() });
35
+ }
36
+ getClient(endpoint, getHeaders) {
37
+ const name = endpoint;
38
+ let client = this.apollo.use(name);
39
+ console.debug('[ApolloMultiService] getClient:', name);
40
+ if (!client) {
41
+ this.createClient(name, endpoint, getHeaders);
42
+ client = this.apollo.use(name);
43
+ }
44
+ return client;
45
+ }
46
+ };
47
+ exports.ApolloMultiService = ApolloMultiService;
48
+ exports.ApolloMultiService = ApolloMultiService = tslib_1.__decorate([
49
+ (0, core_1.Injectable)({ providedIn: 'root' })
50
+ ], ApolloMultiService);
51
+ exports.GET_APOLLO_CLIENT = (0, core_3.makeDI)('GET_APOLLO_CLIENT');
52
+ //# sourceMappingURL=apollo-multi.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apollo-multi.service.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/apollo-multi.service.ts"],"names":[],"mappings":";;;;AAAA,wCAAmD;AACnD,mDAAoD;AAEpD,8CAA+C;AAC/C,gDAAqD;AACrD,yDAAyD;AACzD,8CAAoF;AACpF,wDAA6D;AAC7D,uCAAsC;AAEtC,mCAAkE;AAElE,SAAS,cAAc,CAAC,KAAmB;IACzC,MAAM,UAAU,GAAG,IAAA,6BAAiB,EAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,CACL,UAAU,CAAC,IAAI,KAAK,qBAAqB;QACzC,UAAU,CAAC,SAAS,KAAK,cAAc,CACxC,CAAC;AACJ,CAAC;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAAxB;QACI,WAAM,GAAG,IAAA,aAAM,EAAC,uBAAM,CAAC,CAAC;QACxB,aAAQ,GAAG,IAAA,aAAM,EAAC,eAAQ,CAAC,CAAC;IA8BvC,CAAC;IA5BW,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,UAAsB;QAC1E,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAA,YAAK,EAChB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACpC,MAAM,EACN,iBAAU,CAAC,IAAI,CAAC;YACd,IAAA,oBAAU,EAAC,GAAS,EAAE;gBACpB,MAAM,OAAO,GAAG,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;gBAClD,OAAO,EAAE,OAAO,EAAE,CAAA;YACpB,CAAC,CAAA,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC;SACxC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,qBAAa,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,UAAsB;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC;QACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC9C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAhCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,iBAAU,EAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,kBAAkB,CAgC9B;AAIY,QAAA,iBAAiB,GAAG,IAAA,aAAM,EAAuB,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ export declare function getFlattenFieldAnnotations<Annotation>(T: any, prefix?: string): Record<string, Annotation>;
2
+ export declare function getFields(T: any, options?: {
3
+ prefix?: string;
4
+ case?: 'snake' | 'camel';
5
+ }): string[];
6
+ export declare const Hasura: {
7
+ Text: (nameOrProps?: {
8
+ name?: string;
9
+ } | string) => (target: any, propName: string) => void;
10
+ Timestamp: (nameOrProps?: {
11
+ name?: string;
12
+ } | string) => (target: any, propName: string) => void;
13
+ Date: (nameOrProps?: {
14
+ name?: string;
15
+ } | string) => (target: any, propName: string) => void;
16
+ Integer: (nameOrProps?: {
17
+ name?: string;
18
+ } | string) => (target: any, propName: string) => void;
19
+ Numeric: (nameOrProps?: {
20
+ name?: string;
21
+ } | string) => (target: any, propName: string) => void;
22
+ Boolean: (nameOrProps?: {
23
+ name?: string;
24
+ } | string) => (target: any, propName: string) => void;
25
+ Map: (childType: () => any) => (target: any, propName: string) => void;
26
+ JSON: (nameOrProps?: {
27
+ name?: string;
28
+ } | string) => (target: any, propName: string) => void;
29
+ getAnnotations: (target: any) => {
30
+ type: string;
31
+ fieldName: string;
32
+ propName: string;
33
+ childType: any;
34
+ }[];
35
+ };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Hasura = void 0;
4
+ exports.getFlattenFieldAnnotations = getFlattenFieldAnnotations;
5
+ exports.getFields = getFields;
6
+ const create_decorator_1 = require("@nx-ddd/core/create-decorator");
7
+ const lodash_es_1 = require("lodash-es");
8
+ const { createDecorator, getAnnotations, } = (0, create_decorator_1.makeDecoratorFactories)((type, fieldName, propName, options) => ({ type, fieldName, propName, childType: options.childType }), '[@nx-ddd/hasura] annotations');
9
+ function getFlattenFieldAnnotations(T, prefix = '') {
10
+ const annotations = exports.Hasura.getAnnotations(T);
11
+ return (annotations !== null && annotations !== void 0 ? annotations : []).reduce((acc, annotation) => {
12
+ const currentKey = prefix ? (0, lodash_es_1.camelCase)(`${prefix}_${annotation.fieldName}`) : annotation.fieldName;
13
+ if (annotation.childType) {
14
+ return Object.assign(Object.assign({}, acc), getFlattenFieldAnnotations(annotation.childType(), currentKey));
15
+ }
16
+ return Object.assign(Object.assign({}, acc), { [currentKey]: annotation });
17
+ }, {});
18
+ }
19
+ function getFields(T, options = {
20
+ prefix: '',
21
+ case: 'snake'
22
+ }) {
23
+ const annotations = exports.Hasura.getAnnotations(T);
24
+ const changeCase = (options === null || options === void 0 ? void 0 : options.case) === 'snake' ? lodash_es_1.snakeCase : lodash_es_1.camelCase;
25
+ const fields = (annotations !== null && annotations !== void 0 ? annotations : []).flatMap((annotation) => {
26
+ const currentKey = changeCase((options === null || options === void 0 ? void 0 : options.prefix) ? `${options === null || options === void 0 ? void 0 : options.prefix}_${annotation.fieldName}` : annotation.fieldName);
27
+ if (annotation.childType) {
28
+ return [
29
+ ...getFields(annotation.childType(), {
30
+ prefix: currentKey,
31
+ case: options === null || options === void 0 ? void 0 : options.case,
32
+ })
33
+ ];
34
+ }
35
+ return [currentKey];
36
+ });
37
+ return fields;
38
+ }
39
+ exports.Hasura = {
40
+ Text: createDecorator('text'),
41
+ Timestamp: createDecorator('timestamp'),
42
+ Date: createDecorator('date'),
43
+ Integer: createDecorator('integer'),
44
+ Numeric: createDecorator('numeric'),
45
+ Boolean: createDecorator('boolean'),
46
+ Map: (childType) => createDecorator('map', { childType })(),
47
+ JSON: createDecorator('json'),
48
+ getAnnotations,
49
+ };
50
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ import { Provider } from "@angular/core";
3
+ export interface HasuraConfig {
4
+ adminSecret?: string;
5
+ url: string;
6
+ }
7
+ export declare const HASURA_CONFIG: InjectionToken<HasuraConfig>;
8
+ export declare function provideHasuraConfig(config: HasuraConfig): Provider[];
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HASURA_CONFIG = void 0;
4
+ exports.provideHasuraConfig = provideHasuraConfig;
5
+ const http_1 = require("@angular/common/http");
6
+ const core_1 = require("@angular/core");
7
+ const hasura_interceptor_1 = require("./hasura.interceptor");
8
+ exports.HASURA_CONFIG = new core_1.InjectionToken('HASURA_CONFIG');
9
+ function provideHasuraConfig(config) {
10
+ return [
11
+ { provide: exports.HASURA_CONFIG, useValue: config },
12
+ config.adminSecret ? { provide: http_1.HTTP_INTERCEPTORS, useClass: hasura_interceptor_1.HasuraInterceptor, multi: true } : [],
13
+ ];
14
+ }
15
+ //# sourceMappingURL=hasura.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.config.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.config.ts"],"names":[],"mappings":";;;AAYA,kDAKC;AAjBD,+CAAyD;AACzD,wCAA+C;AAE/C,6DAAyD;AAO5C,QAAA,aAAa,GAAG,IAAI,qBAAc,CAAe,eAAe,CAAC,CAAC;AAE/E,SAAgB,mBAAmB,CAAC,MAAoB;IACtD,OAAO;QACL,EAAE,OAAO,EAAE,qBAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,wBAAiB,EAAE,QAAQ,EAAE,sCAAiB,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE;KAClG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { ClassConstructor } from 'class-transformer';
2
+ import dayjs from 'dayjs';
3
+ export interface HasuraConverter<E> {
4
+ toHasura(entity: E): object;
5
+ toHasuraMany(entities: E[]): object[];
6
+ fromHasura(entity: object): E;
7
+ fromHasuraMany(entities: object[]): E[];
8
+ }
9
+ export declare function deepCamelToSnakeCase(obj: any): any;
10
+ export declare function deepSnakeToCamelCase(obj: any): any;
11
+ export declare function fromHasura<T extends object>(_object: object, type: ClassConstructor<T>): T;
12
+ export declare function toHasura(object: object, type: any, { extraFunc }?: {
13
+ extraFunc?: (obj: any) => any;
14
+ }): any;
15
+ export declare function makeConverter<T extends object>(type: {
16
+ new (): T;
17
+ }): HasuraConverter<T>;
18
+ export declare class HasuraUtils {
19
+ static toTimestamp(date: dayjs.Dayjs | null): string | null;
20
+ static fromHasura<T extends object>(_object: object, type: ClassConstructor<T>): T;
21
+ static toHasura(object: object, type: any, { extraFunc }?: {
22
+ extraFunc?: (obj: any) => any;
23
+ }): any;
24
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasuraUtils = void 0;
4
+ exports.deepCamelToSnakeCase = deepCamelToSnakeCase;
5
+ exports.deepSnakeToCamelCase = deepSnakeToCamelCase;
6
+ exports.fromHasura = fromHasura;
7
+ exports.toHasura = toHasura;
8
+ exports.makeConverter = makeConverter;
9
+ const tslib_1 = require("tslib");
10
+ const decorators_1 = require("./decorators");
11
+ const lodash_es_1 = require("lodash-es");
12
+ const util_1 = require("@nx-ddd/core/util");
13
+ const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
14
+ function deepCamelToSnakeCase(obj) {
15
+ if (Array.isArray(obj)) {
16
+ return obj.map(deepCamelToSnakeCase);
17
+ }
18
+ else if ((0, lodash_es_1.isObject)(obj)) {
19
+ return (0, lodash_es_1.mapKeys)((0, lodash_es_1.mapValues)(obj, deepCamelToSnakeCase), (_, key) => (0, lodash_es_1.snakeCase)(key));
20
+ }
21
+ return obj;
22
+ }
23
+ function deepSnakeToCamelCase(obj) {
24
+ if (Array.isArray(obj)) {
25
+ return obj.map(deepSnakeToCamelCase);
26
+ }
27
+ else if ((0, lodash_es_1.isObject)(obj)) {
28
+ return (0, lodash_es_1.mapKeys)((0, lodash_es_1.mapValues)(obj, deepSnakeToCamelCase), (_, key) => key.replace(/_([a-z])/g, (g) => g[1].toUpperCase()));
29
+ }
30
+ return obj;
31
+ }
32
+ function fromHasura(_object, type) {
33
+ return HasuraUtils.fromHasura(_object, type);
34
+ }
35
+ function toHasura(object, type, { extraFunc = deepCamelToSnakeCase } = {}) {
36
+ return HasuraUtils.toHasura(object, type, { extraFunc });
37
+ }
38
+ function makeConverter(type) {
39
+ return {
40
+ toHasura(entity) {
41
+ return toHasura(entity, type);
42
+ },
43
+ toHasuraMany(entities) {
44
+ return entities.map((entity) => this.toHasura(entity));
45
+ },
46
+ fromHasura(entity) {
47
+ return fromHasura(entity, type);
48
+ },
49
+ fromHasuraMany(entities) {
50
+ return entities.map((entity) => this.fromHasura(entity));
51
+ },
52
+ };
53
+ }
54
+ class HasuraUtils {
55
+ static toTimestamp(date) {
56
+ if (!dayjs_1.default.isDayjs(date))
57
+ return null;
58
+ return date.toISOString();
59
+ }
60
+ static fromHasura(_object, type) {
61
+ const object = deepSnakeToCamelCase(_object);
62
+ return (0, util_1.plainToInstanceWithValid)(type, object);
63
+ }
64
+ static toHasura(object, type, { extraFunc = deepCamelToSnakeCase } = {}) {
65
+ const fields = (0, decorators_1.getFlattenFieldAnnotations)(type);
66
+ const obj = Object.entries(fields).reduce((acc, [key, annotation]) => {
67
+ const value = (0, lodash_es_1.get)(object, annotation.fieldName);
68
+ switch (annotation.type) {
69
+ case 'text': return Object.assign(Object.assign({}, acc), { [key]: value });
70
+ case 'timestamp': return Object.assign(Object.assign({}, acc), { [key]: this.toTimestamp(value) });
71
+ case 'numeric': return Object.assign(Object.assign({}, acc), { [key]: isNaN(Number(value)) ? null : Number(value) });
72
+ case 'integer': return Object.assign(Object.assign({}, acc), { [key]: isNaN(Number(value)) ? null : Number(value) });
73
+ case 'json': return Object.assign(Object.assign({}, acc), { [key]: value });
74
+ case 'map': return Object.assign({}, acc);
75
+ default: return Object.assign(Object.assign({}, acc), { [key]: value });
76
+ }
77
+ }, {});
78
+ return extraFunc(obj);
79
+ }
80
+ }
81
+ exports.HasuraUtils = HasuraUtils;
82
+ //# sourceMappingURL=hasura.converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.converter.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export { DeepPartial } from '@nx-ddd/common/domain/models';
2
+ export { TransformToDayjs } from '@nx-ddd/common/domain/models';
3
+ export { IsDayjs } from 'class-validator-extended';
4
+ import { EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
5
+ import { ApolloLink, HttpLink, InMemoryCache } from '@apollo/client/core';
6
+ import { HasuraConfig } from './hasura.config';
7
+ import { Observable } from 'rxjs';
8
+ export declare function provideHttpLink(): {
9
+ provide: typeof ApolloLink;
10
+ useFactory: (config: HasuraConfig) => HttpLink;
11
+ deps: InjectionToken<HasuraConfig>[];
12
+ };
13
+ type HasuraAuthorization = Promise<string> | Observable<string> | string;
14
+ export declare function provideHasuraAuthorization(useFactory: () => HasuraAuthorization): {
15
+ provide: InjectionToken<HasuraAuthorization>;
16
+ useFactory: () => HasuraAuthorization;
17
+ };
18
+ type PromiseOrObservable<T> = Promise<T> | Observable<T> | T;
19
+ export declare function provideGraphqlHeaders(useFactory: () => () => PromiseOrObservable<Record<string, string>>): Provider;
20
+ export declare function provideWebsocketLink(): {
21
+ provide: typeof ApolloLink;
22
+ useFactory: () => import("@apollo/client/link/ws").WebSocketLink;
23
+ };
24
+ export declare function provideApolloOptions(): {
25
+ provide: InjectionToken<import("@apollo/client/core").ApolloClientOptions<any>>;
26
+ useFactory: (link: ApolloLink) => {
27
+ cache: InMemoryCache;
28
+ link: ApolloLink;
29
+ };
30
+ deps: (typeof ApolloLink)[];
31
+ };
32
+ export declare function provideHasura(config: HasuraConfig): (Provider | EnvironmentProviders)[];
33
+ export declare function provideHasuraWithWebSocket(config: HasuraConfig): (Provider | EnvironmentProviders)[];
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsDayjs = exports.TransformToDayjs = void 0;
4
+ exports.provideHttpLink = provideHttpLink;
5
+ exports.provideHasuraAuthorization = provideHasuraAuthorization;
6
+ exports.provideGraphqlHeaders = provideGraphqlHeaders;
7
+ exports.provideWebsocketLink = provideWebsocketLink;
8
+ exports.provideApolloOptions = provideApolloOptions;
9
+ exports.provideHasura = provideHasura;
10
+ exports.provideHasuraWithWebSocket = provideHasuraWithWebSocket;
11
+ var models_1 = require("@nx-ddd/common/domain/models");
12
+ Object.defineProperty(exports, "TransformToDayjs", { enumerable: true, get: function () { return models_1.TransformToDayjs; } });
13
+ var class_validator_extended_1 = require("class-validator-extended");
14
+ Object.defineProperty(exports, "IsDayjs", { enumerable: true, get: function () { return class_validator_extended_1.IsDayjs; } });
15
+ const core_1 = require("@angular/core");
16
+ const core_2 = require("@apollo/client/core");
17
+ const apollo_angular_1 = require("apollo-angular");
18
+ const hasura_config_1 = require("./hasura.config");
19
+ const links_1 = require("./links");
20
+ function provideHttpLink() {
21
+ return {
22
+ provide: core_2.ApolloLink,
23
+ useFactory: (config) => new core_2.HttpLink({
24
+ uri: config.url,
25
+ headers: (config === null || config === void 0 ? void 0 : config.adminSecret) && { 'x-hasura-admin-secret': config.adminSecret },
26
+ }),
27
+ deps: [hasura_config_1.HASURA_CONFIG],
28
+ };
29
+ }
30
+ const HASURA_AUTHORIZATION = new core_1.InjectionToken('HASURA_AUTHORIZATION');
31
+ function provideHasuraAuthorization(useFactory) {
32
+ return {
33
+ provide: HASURA_AUTHORIZATION,
34
+ useFactory,
35
+ };
36
+ }
37
+ const GRAPHQL_HEADERS = new core_1.InjectionToken('GRAPHQL_HEADERS', {
38
+ providedIn: 'root',
39
+ factory: () => () => ({}),
40
+ });
41
+ function provideGraphqlHeaders(useFactory) {
42
+ return [
43
+ { provide: GRAPHQL_HEADERS, useFactory },
44
+ ];
45
+ }
46
+ function provideWebsocketLink() {
47
+ return {
48
+ provide: core_2.ApolloLink,
49
+ useFactory: () => {
50
+ const config = (0, core_1.inject)(hasura_config_1.HASURA_CONFIG);
51
+ const _getHeaders = (0, core_1.inject)(GRAPHQL_HEADERS);
52
+ return (0, links_1.buildWebsocketLink)(config.url, _getHeaders);
53
+ },
54
+ };
55
+ }
56
+ function provideApolloOptions() {
57
+ return {
58
+ provide: apollo_angular_1.APOLLO_OPTIONS,
59
+ useFactory: (link) => ({ cache: new core_2.InMemoryCache(), link }),
60
+ deps: [core_2.ApolloLink],
61
+ };
62
+ }
63
+ function provideHasura(config) {
64
+ return [
65
+ (0, core_1.importProvidersFrom)(apollo_angular_1.ApolloModule),
66
+ (0, hasura_config_1.provideHasuraConfig)(config),
67
+ provideApolloOptions(),
68
+ provideHttpLink(),
69
+ ];
70
+ }
71
+ function provideHasuraWithWebSocket(config) {
72
+ return [
73
+ (0, core_1.importProvidersFrom)(apollo_angular_1.ApolloModule),
74
+ (0, hasura_config_1.provideHasuraConfig)(config),
75
+ provideApolloOptions(),
76
+ provideWebsocketLink(),
77
+ ];
78
+ }
79
+ //# sourceMappingURL=hasura.di.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.di.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.di.ts"],"names":[],"mappings":";;;AAUA,0CASC;AAMD,gEAKC;AASD,sDAMC;AAED,oDASC;AAED,oDAMC;AAED,sCAOC;AAED,gEAOC;AAjFD,uDAAgE;AAAvD,0GAAA,gBAAgB,OAAA;AACzB,qEAAmD;AAA1C,mHAAA,OAAO,OAAA;AAChB,wCAA4G;AAC5G,8CAA0E;AAC1E,mDAA8D;AAC9D,mDAAmF;AACnF,mCAAyD;AAGzD,SAAgB,eAAe;IAC7B,OAAO;QACL,OAAO,EAAE,iBAAU;QACnB,UAAU,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,IAAI,eAAQ,CAAC;YACjD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,EAAE,uBAAuB,EAAE,MAAM,CAAC,WAAW,EAAE;SAChF,CAAC;QACF,IAAI,EAAE,CAAC,6BAAa,CAAC;KACtB,CAAC;AACJ,CAAC;AAID,MAAM,oBAAoB,GAAG,IAAI,qBAAc,CAAsB,sBAAsB,CAAC,CAAC;AAE7F,SAAgB,0BAA0B,CAAC,UAAqC;IAC9E,OAAO;QACL,OAAO,EAAE,oBAAoB;QAC7B,UAAU;KACX,CAAC;AACJ,CAAC;AAID,MAAM,eAAe,GAAG,IAAI,qBAAc,CAAa,iBAAiB,EAAE;IACxE,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CAC1B,CAAC,CAAC;AAEH,SAAgB,qBAAqB,CACnC,UAAmE;IAEnE,OAAO;QACL,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO;QACL,OAAO,EAAE,iBAAU;QACnB,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,MAAM,GAAG,IAAA,aAAM,EAAC,6BAAa,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,IAAA,aAAM,EAAC,eAAe,CAAC,CAAC;YAC5C,OAAO,IAAA,0BAAkB,EAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO;QACL,OAAO,EAAE,+BAAc;QACvB,UAAU,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,oBAAa,EAAE,EAAE,IAAI,EAAE,CAAC;QACxE,IAAI,EAAE,CAAC,iBAAU,CAAC;KACnB,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,MAAoB;IAChD,OAAO;QACL,IAAA,0BAAmB,EAAC,6BAAY,CAAC;QACjC,IAAA,mCAAmB,EAAC,MAAM,CAAC;QAC3B,oBAAoB,EAAE;QACtB,eAAe,EAAE;KAClB,CAAA;AACH,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAAoB;IAC7D,OAAO;QACL,IAAA,0BAAmB,EAAC,6BAAY,CAAC;QACjC,IAAA,mCAAmB,EAAC,MAAM,CAAC;QAC3B,oBAAoB,EAAE;QACtB,oBAAoB,EAAE;KACvB,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from "@angular/common/http";
2
+ import { Observable } from "rxjs";
3
+ export declare class HasuraInterceptor implements HttpInterceptor {
4
+ private config;
5
+ intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
6
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasuraInterceptor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@angular/core");
6
+ const hasura_config_1 = require("./hasura.config");
7
+ let HasuraInterceptor = class HasuraInterceptor {
8
+ constructor() {
9
+ this.config = (0, core_1.inject)(hasura_config_1.HASURA_CONFIG);
10
+ }
11
+ intercept(req, next) {
12
+ if (req.url.startsWith(this.config.url)) {
13
+ return next.handle(req.clone({
14
+ headers: req.headers.set('x-hasura-admin-secret', this.config.adminSecret),
15
+ }));
16
+ }
17
+ return next.handle(req);
18
+ }
19
+ };
20
+ exports.HasuraInterceptor = HasuraInterceptor;
21
+ exports.HasuraInterceptor = HasuraInterceptor = tslib_1.__decorate([
22
+ (0, core_1.Injectable)()
23
+ ], HasuraInterceptor);
24
+ //# sourceMappingURL=hasura.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.interceptor.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.interceptor.ts"],"names":[],"mappings":";;;;AACA,wCAAmD;AAEnD,mDAAgD;AAGzC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACG,WAAM,GAAG,IAAA,aAAM,EAAC,6BAAa,CAAC,CAAC;IAUzC,CAAC;IARC,SAAS,CAAC,GAAqB,EAAE,IAAiB;QAChD,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aAC3E,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AAXY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,iBAAU,GAAE;GACA,iBAAiB,CAW7B"}
@@ -0,0 +1,40 @@
1
+ import { FetchResult, OperationVariables } from "@apollo/client/core";
2
+ import { HasuraConverter } from "./hasura.converter";
3
+ import { HasuraService } from "./hasura.service";
4
+ import { Observable } from "rxjs";
5
+ export declare function makeSubscription(query: any): {
6
+ kind: any;
7
+ definitions: any;
8
+ };
9
+ export declare abstract class HasuraRepository<E extends {
10
+ id: string;
11
+ }> {
12
+ protected hasura: HasuraService;
13
+ protected abstract converter: HasuraConverter<E>;
14
+ readonly abstract updateColumns: string[];
15
+ readonly abstract tableName: string;
16
+ protected subscribe<T = any, TVariables extends OperationVariables = OperationVariables>({ query, variables }: {
17
+ query: any;
18
+ variables: any;
19
+ }): Observable<FetchResult<T>>;
20
+ get pkey(): string;
21
+ get(params: {
22
+ id: string;
23
+ }): Promise<any>;
24
+ get listQuery(): string;
25
+ list(): Promise<E[]>;
26
+ listChanges(): Observable<E[]>;
27
+ create(data: Omit<E, 'id' | 'createdAt' | 'updatedAt' | 'deletedAt'> & Partial<Pick<E, 'id'>>): Promise<E>;
28
+ createMany(data: Omit<E, 'id' | 'createdAt' | 'updatedAt'>[]): Promise<E[]>;
29
+ update(data: Partial<E> & {
30
+ id: string;
31
+ }): Promise<FetchResult<any>>;
32
+ updateMany(data: Partial<E>[]): Promise<number>;
33
+ delete(id: string): Promise<FetchResult<any>>;
34
+ save(data: Omit<E, 'createdAt' | 'updatedAt' | 'deletedAt'>): Promise<FetchResult<any>>;
35
+ saveMany(entities: E[]): Promise<FetchResult<any>>;
36
+ deleteMany(params: {
37
+ id: string;
38
+ }[]): Promise<number>;
39
+ deleteAll(): Promise<FetchResult<any>>;
40
+ }
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasuraRepository = void 0;
4
+ exports.makeSubscription = makeSubscription;
5
+ const tslib_1 = require("tslib");
6
+ const core_1 = require("@angular/core");
7
+ const core_2 = require("@apollo/client/core");
8
+ const hasura_service_1 = require("./hasura.service");
9
+ const lodash_es_1 = require("lodash-es");
10
+ const rxjs_1 = require("rxjs");
11
+ function makeSubscription(query) {
12
+ const { kind, definitions } = query;
13
+ const subscriptionDefinitions = definitions.map((definition) => {
14
+ if (definition.kind === 'OperationDefinition' && definition.operation === 'query') {
15
+ return Object.assign(Object.assign({}, definition), { operation: 'subscription' });
16
+ }
17
+ return definition;
18
+ });
19
+ return { kind, definitions: subscriptionDefinitions };
20
+ }
21
+ ;
22
+ let HasuraRepository = class HasuraRepository {
23
+ constructor() {
24
+ this.hasura = (0, core_1.inject)(hasura_service_1.HasuraService);
25
+ }
26
+ subscribe({ query, variables }) {
27
+ return this.hasura.getApolloClient().pipe((0, rxjs_1.switchMap)((client) => client.subscribe({
28
+ query: makeSubscription(query),
29
+ variables: variables,
30
+ })));
31
+ }
32
+ get pkey() {
33
+ return `${this.tableName}_pkey`;
34
+ }
35
+ get(params) {
36
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
37
+ const queryName = `${this.tableName}_by_pk`;
38
+ return (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient()).then((client) => client.query({
39
+ query: (0, core_2.gql) `query get($id: String!) {
40
+ ${queryName}(id: $id) {
41
+ ${this.updateColumns.join(' ')}
42
+ }
43
+ }`,
44
+ variables: params,
45
+ })).then((res => res.data[queryName])).then(data => data ? this.converter.fromHasura(data) : data);
46
+ });
47
+ }
48
+ get listQuery() {
49
+ return `query list {
50
+ ${this.tableName} {
51
+ ${this.updateColumns.join(' ')}
52
+ }
53
+ }`;
54
+ }
55
+ list() {
56
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
57
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
58
+ return client.query({
59
+ query: (0, core_2.gql) `${this.listQuery}`,
60
+ }).then(res => this.converter.fromHasuraMany(res.data[this.tableName]));
61
+ });
62
+ }
63
+ listChanges() {
64
+ return this.subscribe({
65
+ query: (0, core_2.gql) `${this.listQuery}`,
66
+ variables: {},
67
+ }).pipe((0, rxjs_1.map)(res => this.converter.fromHasuraMany(res.data[this.tableName])));
68
+ }
69
+ create(data) {
70
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
71
+ const mutationName = `insert_${this.tableName}`;
72
+ const mutation = (0, core_2.gql) `mutation create($object: ${this.tableName}_insert_input!) {
73
+ ${mutationName}(objects: [$object]) {
74
+ affected_rows
75
+ returning {
76
+ ${this.updateColumns.join(' ')}
77
+ }
78
+ }
79
+ }`;
80
+ const object = (0, lodash_es_1.omitBy)((0, lodash_es_1.omit)(this.converter.toHasura(data), ['createdAt', 'updatedAt', 'created_at', 'updated_at']), value => typeof value === 'undefined');
81
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
82
+ return client.mutate({
83
+ mutation,
84
+ variables: { object },
85
+ }).then(result => {
86
+ return this.converter.fromHasura(result.data[mutationName].returning[0]);
87
+ }).catch(error => {
88
+ console.error(error.graphQLErrors);
89
+ throw error;
90
+ });
91
+ });
92
+ }
93
+ createMany(data) {
94
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
95
+ const mutationName = `insert_${this.tableName}`;
96
+ const objects = data.map((item) => this.converter.toHasura(item));
97
+ const mutation = (0, core_2.gql) `
98
+ mutation createMany($objects: [${this.tableName}_insert_input!]!) {
99
+ ${mutationName}(objects: $objects) {
100
+ returning {
101
+ ${this.updateColumns.join(" ")}
102
+ }
103
+ }
104
+ }
105
+ `;
106
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
107
+ return client.mutate({
108
+ mutation,
109
+ variables: { objects },
110
+ }).then((result) => this.converter.fromHasuraMany(result.data[mutationName].returning)).catch((error) => {
111
+ console.error(error.graphQLErrors);
112
+ throw error;
113
+ });
114
+ });
115
+ }
116
+ update(data) {
117
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
118
+ const mutation = (0, core_2.gql) `mutation update($id: String!, $object: ${this.tableName}_set_input!) {
119
+ update_${this.tableName}(where: {id: {_eq: $id}}, _set: $object) { affected_rows }
120
+ }`;
121
+ const fields = Object.keys(data).map(lodash_es_1.snakeCase);
122
+ const object = (0, lodash_es_1.omitBy)((0, lodash_es_1.omit)((0, lodash_es_1.pick)(this.converter.toHasura(data), fields), ['createdAt', 'updatedAt', 'created_at', 'updated_at']), value => typeof value === 'undefined');
123
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
124
+ console.debug('[Hasura Repository] update:', object);
125
+ return client.mutate({
126
+ mutation,
127
+ variables: {
128
+ id: data.id,
129
+ object,
130
+ },
131
+ }).catch(error => {
132
+ console.error(error.graphQLErrors);
133
+ throw error;
134
+ });
135
+ });
136
+ }
137
+ updateMany(data) {
138
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
139
+ const mutationName = `update_${this.tableName}_many`;
140
+ const objects = data.map((item) => {
141
+ const fields = Object.keys(item).map(lodash_es_1.snakeCase);
142
+ const object = (0, lodash_es_1.pick)(this.converter.toHasura(item), fields);
143
+ return { where: { id: { _eq: item.id } }, _set: object };
144
+ });
145
+ const mutation = (0, core_2.gql) `
146
+ mutation ${mutationName}($objects: [${this.tableName}_updates!]!) {
147
+ ${mutationName}(updates: $objects) {
148
+ affected_rows
149
+ }
150
+ }
151
+ `;
152
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
153
+ return client
154
+ .mutate({ mutation, variables: { objects } })
155
+ .then((result) => result.data[mutationName].affected_rows)
156
+ .catch((error) => {
157
+ console.error(error.graphQLErrors);
158
+ throw error;
159
+ });
160
+ });
161
+ }
162
+ delete(id) {
163
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
164
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
165
+ return client.mutate({
166
+ mutation: (0, core_2.gql) `mutation delete($id: String!) {
167
+ delete_${this.tableName}(where: {id: {_eq: $id}}) { affected_rows }
168
+ }`,
169
+ variables: { id },
170
+ }).catch(error => {
171
+ console.error(error.graphQLErrors);
172
+ throw error;
173
+ });
174
+ });
175
+ }
176
+ save(data) {
177
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
178
+ const object = (0, lodash_es_1.omit)(this.converter.toHasura(data), ['createdAt', 'updatedAt']);
179
+ const query = (0, core_2.gql) `mutation upsert($object: [${this.tableName}_insert_input!]!) {
180
+ insert_${this.tableName}(
181
+ objects: $object,
182
+ on_conflict: {
183
+ constraint: ${this.pkey},
184
+ update_columns: [${this.updateColumns}]
185
+ }
186
+ ) { affected_rows }
187
+ }`;
188
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
189
+ console.debug('[Hasura Repository] save:', client);
190
+ return client.mutate({
191
+ mutation: query,
192
+ variables: {
193
+ object: object,
194
+ },
195
+ }).catch(error => {
196
+ console.error(error.graphQLErrors);
197
+ throw error;
198
+ });
199
+ });
200
+ }
201
+ saveMany(entities) {
202
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
203
+ const query = (0, core_2.gql) `mutation upsert($objects: [${this.tableName}_insert_input!]!) {
204
+ insert_${this.tableName}(
205
+ objects: $objects,
206
+ on_conflict: {
207
+ constraint: ${this.pkey},
208
+ update_columns: [${this.updateColumns}]
209
+ }
210
+ ) { affected_rows }
211
+ }`;
212
+ const objects = entities.map(entity => this.converter.toHasura(entity));
213
+ console.debug('[Hasura Repository] objects:', objects);
214
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
215
+ return client.mutate({
216
+ mutation: query,
217
+ variables: { objects },
218
+ }).catch(error => {
219
+ console.error(error);
220
+ // console.error(error.graphQLErrors?.[0]?.extensions?.internal);
221
+ throw error;
222
+ });
223
+ });
224
+ }
225
+ deleteMany(params) {
226
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
227
+ const mutationName = `delete_${this.tableName}`;
228
+ const mutation = (0, core_2.gql) `
229
+ mutation deleteMany($ids: [String!]!) {
230
+ ${mutationName}(where: {id: {_in: $ids}}) {
231
+ affected_rows
232
+ }
233
+ }
234
+ `;
235
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
236
+ return client.mutate({
237
+ mutation,
238
+ variables: { ids: params.map(param => param.id) },
239
+ }).then((result) => result.data[mutationName].affected_rows).catch((error) => {
240
+ console.error(error.graphQLErrors);
241
+ throw error;
242
+ });
243
+ });
244
+ }
245
+ deleteAll() {
246
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
247
+ const client = yield (0, rxjs_1.lastValueFrom)(this.hasura.getApolloClient());
248
+ return client.mutate({
249
+ mutation: (0, core_2.gql) `mutation delete_all {
250
+ delete_${this.tableName} (where: {}) { affected_rows }
251
+ }`,
252
+ variables: {},
253
+ });
254
+ });
255
+ }
256
+ };
257
+ exports.HasuraRepository = HasuraRepository;
258
+ exports.HasuraRepository = HasuraRepository = tslib_1.__decorate([
259
+ (0, core_1.Injectable)()
260
+ ], HasuraRepository);
261
+ //# sourceMappingURL=hasura.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.repository.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.repository.ts"],"names":[],"mappings":";;;AAOA,4CAYC;;AAnBD,wCAAmD;AACnD,8CAA2E;AAE3E,qDAAiD;AACjD,yCAA0D;AAC1D,+BAAsE;AAEtE,SAAgB,gBAAgB,CAAC,KAAU;IACzC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAe,EAAE,EAAE;QAClE,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAClF,uCACK,UAAU,KACb,SAAS,EAAE,cAAc,IACzB;QACJ,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;AACxD,CAAC;AAAA,CAAC;AAGK,IAAe,gBAAgB,GAA/B,MAAe,gBAAgB;IAA/B;QACK,WAAM,GAAG,IAAA,aAAM,EAAC,8BAAa,CAAC,CAAC;IA4O3C,CAAC;IAvOW,SAAS,CAGjB,EAAC,KAAK,EAAE,SAAS,EAA+B;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,IAAI,CACvC,IAAA,gBAAS,EAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAgB;YACpD,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;YAC9B,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,GAAG,IAAI,CAAC,SAAS,OAAO,CAAC;IAClC,CAAC;IAEK,GAAG,CAAC,MAAoB;;YAC5B,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC;YAC5C,OAAO,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChF,KAAK,EAAE,IAAA,UAAG,EAAA;UACN,SAAS;YACP,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;QAEhC;gBACF,SAAS,EAAE,MAAM;aAClB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrG,CAAC;KAAA;IAED,IAAI,SAAS;QACX,OAAO;QACH,IAAI,CAAC,SAAS;UACZ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;MAEhC,CAAC;IACL,CAAC;IAEK,IAAI;;YACR,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,KAAK,CAAC;gBAClB,KAAK,EAAE,IAAA,UAAG,EAAA,GAAG,IAAI,CAAC,SAAS,EAAE;aAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;KAAA;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,IAAA,UAAG,EAAA,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,SAAS,EAAE,EAAE;SACd,CAAC,CAAC,IAAI,CACL,IAAA,UAAG,EAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IAEK,MAAM,CAAC,IAAsF;;YACjG,MAAM,YAAY,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAA,UAAG,EAAA,4BAA4B,IAAI,CAAC,SAAS;QAC1D,YAAY;;;YAGR,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;;MAGlC,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,kBAAM,EAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAW,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC;YACjK,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ;gBACR,SAAS,EAAE,EAAE,MAAM,EAAE;aACtB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACf,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IACK,UAAU,CAAC,IAAiD;;YAChE,MAAM,YAAY,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAW,CAAC,CAAC,CAAA;YACxE,MAAM,QAAQ,GAAG,IAAA,UAAG,EAAA;uCACe,IAAI,CAAC,SAAS;UAC3C,YAAY;;cAER,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;;;KAIrC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ;gBACR,SAAS,EAAE,EAAE,OAAO,EAAE;aACvB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACjB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CACnE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,MAAM,CAAC,IAA+B;;YAC1C,MAAM,QAAQ,GAAG,IAAA,UAAG,EAAA,0CAA0C,IAAI,CAAC,SAAS;eACjE,IAAI,CAAC,SAAS;MACvB,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,qBAAS,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAA,kBAAM,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC;YAC/K,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ;gBACR,SAAS,EAAE;oBACT,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM;iBACP;aACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,UAAU,CAAC,IAAkB;;YACjC,MAAM,YAAY,GAAG,UAAU,IAAI,CAAC,SAAS,OAAO,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,qBAAS,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAW,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,IAAA,UAAG,EAAA;iBACP,YAAY,eAAe,IAAI,CAAC,SAAS;UAChD,YAAY;;;;KAIjB,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM;iBACV,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;iBAC5C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC;iBACzD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEK,MAAM,CAAC,EAAU;;YACrB,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,IAAA,UAAG,EAAA;iBACF,IAAI,CAAC,SAAS;QACvB;gBACF,SAAS,EAAE,EAAE,EAAE,EAAE;aAClB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,IAAI,CAAC,IAAsD;;YAC/D,MAAM,MAAM,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAW,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACtF,MAAM,KAAK,GAAG,IAAA,UAAG,EAAA,6BAA6B,IAAI,CAAC,SAAS;eACjD,IAAI,CAAC,SAAS;;;wBAGL,IAAI,CAAC,IAAI;6BACJ,IAAI,CAAC,aAAa;;;MAGzC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE;oBACT,MAAM,EAAE,MAAM;iBACf;aACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,QAAQ,CAAC,QAAa;;YAC1B,MAAM,KAAK,GAAG,IAAA,UAAG,EAAA,8BAA8B,IAAI,CAAC,SAAS;eAClD,IAAI,CAAC,SAAS;;;wBAGL,IAAI,CAAC,IAAI;6BACJ,IAAI,CAAC,aAAa;;;MAGzC,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,EAAE,OAAO,EAAE;aACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,iEAAiE;gBACjE,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,UAAU,CAAC,MAAsB;;YACrC,MAAM,YAAY,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAA,UAAG,EAAA;;UAEd,YAAY;;;;KAIjB,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ;gBACR,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;aAClD,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,SAAS;;YACb,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,IAAA,UAAG,EAAA;iBACF,IAAI,CAAC,SAAS;QACvB;gBACF,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAA;AA7OqB,4CAAgB;2BAAhB,gBAAgB;IADrC,IAAA,iBAAU,GAAE;GACS,gBAAgB,CA6OrC"}
@@ -0,0 +1,18 @@
1
+ import { Apollo } from "apollo-angular";
2
+ import { ApolloClient } from "@apollo/client/core";
3
+ import { Observable } from "rxjs";
4
+ import { ApolloMultiService } from "./apollo-multi.service";
5
+ export declare class HasuraService {
6
+ private http;
7
+ readonly apollo: Apollo;
8
+ readonly config: import("./hasura.config").HasuraConfig;
9
+ readonly apolloMulti: ApolloMultiService;
10
+ readonly _getApolloClient: import("./apollo-multi.service").GetApolloClient<any>;
11
+ getApolloClient(): Observable<ApolloClient<any>>;
12
+ graphql<T = any>(args: {
13
+ query: string;
14
+ variables?: object;
15
+ }): Observable<T>;
16
+ post<T>(endpoint: string, body: object): Observable<T>;
17
+ delete<T>(endpoint: string): Observable<T>;
18
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HasuraService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const http_1 = require("@angular/common/http");
6
+ const core_1 = require("@angular/core");
7
+ const apollo_angular_1 = require("apollo-angular");
8
+ const hasura_config_1 = require("./hasura.config");
9
+ const rxjs_1 = require("rxjs");
10
+ const apollo_multi_service_1 = require("./apollo-multi.service");
11
+ let HasuraService = class HasuraService {
12
+ constructor() {
13
+ var _a;
14
+ this.http = (0, core_1.inject)(http_1.HttpClient);
15
+ this.apollo = (0, core_1.inject)(apollo_angular_1.Apollo);
16
+ this.config = (0, core_1.inject)(hasura_config_1.HASURA_CONFIG);
17
+ this.apolloMulti = (0, core_1.inject)(apollo_multi_service_1.ApolloMultiService);
18
+ this._getApolloClient = (_a = apollo_multi_service_1.GET_APOLLO_CLIENT.inject()) !== null && _a !== void 0 ? _a : (() => this.apollo.client);
19
+ }
20
+ getApolloClient() {
21
+ const clientOrObsOrPromise = this._getApolloClient(this.config);
22
+ if ((0, rxjs_1.isObservable)(clientOrObsOrPromise)) {
23
+ return clientOrObsOrPromise;
24
+ }
25
+ else if (clientOrObsOrPromise instanceof Promise) {
26
+ return (0, rxjs_1.from)(clientOrObsOrPromise);
27
+ }
28
+ else {
29
+ return (0, rxjs_1.of)(clientOrObsOrPromise);
30
+ }
31
+ }
32
+ graphql(args) {
33
+ return this.post('/v1/graphql', {
34
+ query: args.query,
35
+ variables: args.variables,
36
+ });
37
+ }
38
+ post(endpoint, body) {
39
+ return this.http.post(`${this.config.url}${endpoint}`, body, {});
40
+ }
41
+ delete(endpoint) {
42
+ return this.http.delete(`${this.config.url}${endpoint}`);
43
+ }
44
+ };
45
+ exports.HasuraService = HasuraService;
46
+ exports.HasuraService = HasuraService = tslib_1.__decorate([
47
+ (0, core_1.Injectable)({ providedIn: 'root' })
48
+ ], HasuraService);
49
+ //# sourceMappingURL=hasura.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasura.service.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/hasura.service.ts"],"names":[],"mappings":";;;;AAAA,+CAAkD;AAClD,wCAAmD;AACnD,mDAAwC;AACxC,mDAAgD;AAEhD,+BAA0D;AAC1D,iEAA+E;AAIxE,IAAM,aAAa,GAAnB,MAAM,aAAa;IAAnB;;QACG,SAAI,GAAG,IAAA,aAAM,EAAC,iBAAU,CAAC,CAAC;QACzB,WAAM,GAAG,IAAA,aAAM,EAAC,uBAAM,CAAC,CAAC;QACxB,WAAM,GAAG,IAAA,aAAM,EAAC,6BAAa,CAAC,CAAC;QAC/B,gBAAW,GAAG,IAAA,aAAM,EAAC,yCAAkB,CAAC,CAAC;QACzC,qBAAgB,GAAG,MAAA,wCAAiB,CAAC,MAAM,EAAE,mCAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IA2BvF,CAAC;IAzBC,eAAe;QACb,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,IAAA,mBAAY,EAAC,oBAAoB,CAAC,EAAE,CAAC;YACvC,OAAO,oBAAoB,CAAC;QAC9B,CAAC;aAAM,IAAI,oBAAoB,YAAY,OAAO,EAAE,CAAC;YACnD,OAAO,IAAA,WAAI,EAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,IAAA,SAAE,EAAC,oBAAoB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAU,IAAyC;QACxD,OAAO,IAAI,CAAC,IAAI,CAAI,aAAa,EAAE;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAI,QAAgB,EAAE,IAAY;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,CAAI,QAAgB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAhCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,iBAAU,EAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,aAAa,CAgCzB"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './apollo-multi.service';
2
+ export * from './decorators';
3
+ export * from './hasura.config';
4
+ export * from './hasura.converter';
5
+ export * from './hasura.di';
6
+ export * from './hasura.interceptor';
7
+ export * from './hasura.repository';
8
+ export * from './hasura.service';
package/lib/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./apollo-multi.service"), exports);
5
+ tslib_1.__exportStar(require("./decorators"), exports);
6
+ tslib_1.__exportStar(require("./hasura.config"), exports);
7
+ tslib_1.__exportStar(require("./hasura.converter"), exports);
8
+ tslib_1.__exportStar(require("./hasura.di"), exports);
9
+ tslib_1.__exportStar(require("./hasura.interceptor"), exports);
10
+ tslib_1.__exportStar(require("./hasura.repository"), exports);
11
+ tslib_1.__exportStar(require("./hasura.service"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,uDAA6B;AAC7B,0DAAgC;AAChC,6DAAmC;AACnC,sDAA4B;AAC5B,+DAAqC;AACrC,8DAAoC;AACpC,2DAAiC"}
package/lib/links.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { WebSocketLink } from "@apollo/client/link/ws";
2
+ import { Observable } from 'rxjs';
3
+ type PromiseOrObservable<T> = Promise<T> | Observable<T> | T;
4
+ export type GetHeaders = () => PromiseOrObservable<Record<string, string>>;
5
+ export declare function resolve(getHeaders: GetHeaders): Promise<Record<string, string>>;
6
+ export declare function buildWebsocketLink(endpoint: string, getHeaders: GetHeaders): WebSocketLink;
7
+ export {};
package/lib/links.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolve = resolve;
4
+ exports.buildWebsocketLink = buildWebsocketLink;
5
+ const ws_1 = require("@apollo/client/link/ws");
6
+ const rxjs_1 = require("rxjs");
7
+ function wrap(token) {
8
+ return (0, rxjs_1.isObservable)(token) ? token : token instanceof Promise ? (0, rxjs_1.from)(token) : (0, rxjs_1.of)(token);
9
+ }
10
+ function resolve(getHeaders) {
11
+ const headers = wrap(getHeaders());
12
+ return (0, rxjs_1.firstValueFrom)(headers.pipe((0, rxjs_1.filter)((headers) => !!headers), (0, rxjs_1.distinctUntilChanged)(), (0, rxjs_1.tap)((headers) => console.debug('[resolve] headers:', headers))));
13
+ }
14
+ function buildWebsocketLink(endpoint, getHeaders) {
15
+ return new ws_1.WebSocketLink({
16
+ uri: endpoint.replace('http', 'ws'),
17
+ options: {
18
+ reconnect: true,
19
+ connectionParams: () => resolve(getHeaders).then((headers) => ({ headers })),
20
+ },
21
+ });
22
+ }
23
+ //# sourceMappingURL=links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../../../../packages/@nx-ddd/hasura/src/lib/links.ts"],"names":[],"mappings":";;AAUA,0BAOC;AAED,gDAQC;AA3BD,+CAAuD;AACvD,+BAA6G;AAK7G,SAAS,IAAI,CAAI,KAAqC;IACpD,OAAO,IAAA,mBAAY,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,SAAgB,OAAO,CAAC,UAAsB;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,OAAO,IAAA,qBAAc,EAAC,OAAO,CAAC,IAAI,CAChC,IAAA,aAAM,EAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9B,IAAA,2BAAoB,GAAE,EACtB,IAAA,UAAG,EAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAC/D,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,UAAsB;IACzE,OAAO,IAAI,kBAAa,CAAC;QACvB,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QACnC,OAAO,EAAE;YACP,SAAS,EAAE,IAAI;YACf,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;SAC7E;KACF,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@nx-ddd/hasura",
3
+ "version": "19.0.0-preview.10",
4
+ "dependencies": {},
5
+ "peerDependencies": {},
6
+ "types": "./index.d.ts",
7
+ "main": "./index.js",
8
+ "type": "commonjs"
9
+ }