@nx-ddd/hasura 19.0.0-preview.9 → 19.1.1

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 (46) hide show
  1. package/apollo/link/index.d.ts +31 -0
  2. package/browser/index.d.ts +8 -0
  3. package/fesm2022/nx-ddd-hasura-apollo-link.mjs +77 -0
  4. package/fesm2022/nx-ddd-hasura-apollo-link.mjs.map +1 -0
  5. package/fesm2022/nx-ddd-hasura-browser.mjs +19 -0
  6. package/fesm2022/nx-ddd-hasura-browser.mjs.map +1 -0
  7. package/fesm2022/nx-ddd-hasura-server.mjs +19 -0
  8. package/fesm2022/nx-ddd-hasura-server.mjs.map +1 -0
  9. package/fesm2022/nx-ddd-hasura.mjs +880 -0
  10. package/fesm2022/nx-ddd-hasura.mjs.map +1 -0
  11. package/index.d.ts +391 -1
  12. package/package.json +32 -6
  13. package/server/index.d.ts +8 -0
  14. package/README.md +0 -11
  15. package/index.js +0 -5
  16. package/index.js.map +0 -1
  17. package/lib/apollo-multi.service.d.ts +0 -23
  18. package/lib/apollo-multi.service.js +0 -52
  19. package/lib/apollo-multi.service.js.map +0 -1
  20. package/lib/decorators.d.ts +0 -35
  21. package/lib/decorators.js +0 -50
  22. package/lib/decorators.js.map +0 -1
  23. package/lib/hasura.config.d.ts +0 -8
  24. package/lib/hasura.config.js +0 -15
  25. package/lib/hasura.config.js.map +0 -1
  26. package/lib/hasura.converter.d.ts +0 -24
  27. package/lib/hasura.converter.js +0 -82
  28. package/lib/hasura.converter.js.map +0 -1
  29. package/lib/hasura.di.d.ts +0 -33
  30. package/lib/hasura.di.js +0 -79
  31. package/lib/hasura.di.js.map +0 -1
  32. package/lib/hasura.interceptor.d.ts +0 -6
  33. package/lib/hasura.interceptor.js +0 -24
  34. package/lib/hasura.interceptor.js.map +0 -1
  35. package/lib/hasura.repository.d.ts +0 -40
  36. package/lib/hasura.repository.js +0 -261
  37. package/lib/hasura.repository.js.map +0 -1
  38. package/lib/hasura.service.d.ts +0 -18
  39. package/lib/hasura.service.js +0 -49
  40. package/lib/hasura.service.js.map +0 -1
  41. package/lib/index.d.ts +0 -8
  42. package/lib/index.js +0 -12
  43. package/lib/index.js.map +0 -1
  44. package/lib/links.d.ts +0 -7
  45. package/lib/links.js +0 -23
  46. package/lib/links.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { HttpLink } from 'apollo-angular/http';
2
+ import { ApolloLink } from '@apollo/client/core';
3
+ import { Observable } from 'rxjs';
4
+ import * as i0 from '@angular/core';
5
+
6
+ type PromiseOrObservable<T> = Promise<T> | Observable<T> | T;
7
+ type GetHeaders = () => PromiseOrObservable<Record<string, string>>;
8
+ declare function wrap<T>(obsOrPromiseOrValue: Promise<T> | Observable<T> | T): Observable<T>;
9
+ declare function resolve(getHeaders: GetHeaders): Promise<Record<string, string>>;
10
+
11
+ declare class ApolloLinkService {
12
+ readonly httpLink: HttpLink;
13
+ readonly WebSocketImpl: {
14
+ new (url: string | URL, protocols?: string | string[]): WebSocket;
15
+ prototype: WebSocket;
16
+ readonly CONNECTING: 0;
17
+ readonly OPEN: 1;
18
+ readonly CLOSING: 2;
19
+ readonly CLOSED: 3;
20
+ };
21
+ private createGraphQLWsClient;
22
+ createHttpLink(baseUrl: string, getHeaders: GetHeaders): ApolloLink;
23
+ createWebSocketLink(baseUrl: string, getHeaders: GetHeaders): ApolloLink;
24
+ createAutoSplitLink(baseUrl: string, getHeaders: GetHeaders): ApolloLink;
25
+ createLink(baseUrl: string, getHeaders: GetHeaders): ApolloLink;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<ApolloLinkService, never>;
27
+ static ɵprov: i0.ɵɵInjectableDeclaration<ApolloLinkService>;
28
+ }
29
+
30
+ export { ApolloLinkService, resolve, wrap };
31
+ export type { GetHeaders };
@@ -0,0 +1,8 @@
1
+ import { Provider } from '@angular/core';
2
+
3
+ /**
4
+ * Provides all necessary dependencies for Hasura in browser environments
5
+ */
6
+ declare function provideHasuraBrowser(): Provider[];
7
+
8
+ export { provideHasuraBrowser };
@@ -0,0 +1,77 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { HttpLink } from 'apollo-angular/http';
4
+ import { setContext } from '@apollo/client/link/context';
5
+ import { ApolloLink, split } from '@apollo/client/core';
6
+ import { getMainDefinition } from '@apollo/client/utilities';
7
+ import { GraphQLWsLink } from '@apollo/client/link/subscriptions';
8
+ import { createClient } from 'graphql-ws';
9
+ import { isObservable, from, of, lastValueFrom, filter, take, distinctUntilChanged } from 'rxjs';
10
+ import { WEBSOCKET } from '@nx-ddd/common/infrastructure/externals/websocket/token';
11
+
12
+ function wrap(obsOrPromiseOrValue) {
13
+ if (isObservable(obsOrPromiseOrValue))
14
+ return obsOrPromiseOrValue;
15
+ if (obsOrPromiseOrValue instanceof Promise)
16
+ return from(obsOrPromiseOrValue);
17
+ return of(obsOrPromiseOrValue);
18
+ }
19
+ function resolve(getHeaders) {
20
+ const headers$ = wrap(getHeaders());
21
+ return lastValueFrom(headers$.pipe(filter((headers) => !!headers), take(1), distinctUntilChanged()));
22
+ }
23
+
24
+ function isSubscription(query) {
25
+ const definition = getMainDefinition(query);
26
+ return (definition.kind === 'OperationDefinition' &&
27
+ definition.operation === 'subscription');
28
+ }
29
+ class ApolloLinkService {
30
+ httpLink = inject(HttpLink);
31
+ WebSocketImpl = WEBSOCKET.inject();
32
+ createGraphQLWsClient(baseUrl, getHeaders) {
33
+ return createClient({
34
+ url: baseUrl.replace('http', 'ws'),
35
+ webSocketImpl: this.WebSocketImpl,
36
+ connectionParams: async () => {
37
+ const headers = await resolve(getHeaders);
38
+ return { headers };
39
+ },
40
+ lazy: true, // 必要時のみ接続を開始
41
+ shouldRetry: () => true, // 再接続を有効化
42
+ retryAttempts: 5, // 再接続試行回数を制限
43
+ keepAlive: 30000, // 30秒ごとにキープアライブ
44
+ });
45
+ }
46
+ createHttpLink(baseUrl, getHeaders) {
47
+ return ApolloLink.from([
48
+ setContext(async () => {
49
+ const headers = await resolve(getHeaders);
50
+ return { headers };
51
+ }),
52
+ this.httpLink.create({ uri: baseUrl, }),
53
+ ]);
54
+ }
55
+ createWebSocketLink(baseUrl, getHeaders) {
56
+ return new GraphQLWsLink(this.createGraphQLWsClient(baseUrl, getHeaders));
57
+ }
58
+ createAutoSplitLink(baseUrl, getHeaders) {
59
+ return split(({ query }) => isSubscription(query), this.createWebSocketLink(baseUrl, getHeaders), this.createHttpLink(baseUrl, getHeaders));
60
+ }
61
+ createLink(baseUrl, getHeaders) {
62
+ return this.createAutoSplitLink(baseUrl, getHeaders);
63
+ }
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ApolloLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
65
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ApolloLinkService, providedIn: 'root' });
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ApolloLinkService, decorators: [{
68
+ type: Injectable,
69
+ args: [{ providedIn: 'root' }]
70
+ }] });
71
+
72
+ /**
73
+ * Generated bundle index. Do not edit.
74
+ */
75
+
76
+ export { ApolloLinkService, resolve, wrap };
77
+ //# sourceMappingURL=nx-ddd-hasura-apollo-link.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-hasura-apollo-link.mjs","sources":["../tmp-esm2022/apollo/link/links.js","../tmp-esm2022/apollo/link/link.service.js","../tmp-esm2022/apollo/link/nx-ddd-hasura-apollo-link.js"],"sourcesContent":["import { distinctUntilChanged, filter, from, isObservable, lastValueFrom, of, take } from 'rxjs';\nexport function wrap(obsOrPromiseOrValue) {\n if (isObservable(obsOrPromiseOrValue))\n return obsOrPromiseOrValue;\n if (obsOrPromiseOrValue instanceof Promise)\n return from(obsOrPromiseOrValue);\n return of(obsOrPromiseOrValue);\n}\nexport function resolve(getHeaders) {\n const headers$ = wrap(getHeaders());\n return lastValueFrom(headers$.pipe(filter((headers) => !!headers), take(1), distinctUntilChanged()));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2hhc3VyYS9zcmMvbGliL2Fwb2xsby9saW5rL2xpbmtzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLElBQUksRUFBTyxNQUFNLE1BQU0sQ0FBQztBQUtsSCxNQUFNLFVBQVUsSUFBSSxDQUFJLG1CQUFtRDtJQUN6RSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFDbEUsSUFBSSxtQkFBbUIsWUFBWSxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3RSxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQXNCO0lBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb20sIGlzT2JzZXJ2YWJsZSwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG50eXBlIFByb21pc2VPck9ic2VydmFibGU8VD4gPSBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPiB8IFQ7XG5leHBvcnQgdHlwZSBHZXRIZWFkZXJzID0gKCkgPT4gUHJvbWlzZU9yT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXA8VD4ob2JzT3JQcm9taXNlT3JWYWx1ZTogUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4gfCBUKTogT2JzZXJ2YWJsZTxUPiB7XG4gIGlmIChpc09ic2VydmFibGUob2JzT3JQcm9taXNlT3JWYWx1ZSkpIHJldHVybiBvYnNPclByb21pc2VPclZhbHVlO1xuICBpZiAob2JzT3JQcm9taXNlT3JWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBmcm9tKG9ic09yUHJvbWlzZU9yVmFsdWUpO1xuICByZXR1cm4gb2Yob2JzT3JQcm9taXNlT3JWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGdldEhlYWRlcnM6IEdldEhlYWRlcnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaGVhZGVycyQgPSB3cmFwKGdldEhlYWRlcnMoKSk7XG4gIHJldHVybiBsYXN0VmFsdWVGcm9tKGhlYWRlcnMkLnBpcGUoXG4gICAgZmlsdGVyKChoZWFkZXJzKSA9PiAhIWhlYWRlcnMpLFxuICAgIHRha2UoMSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKSlcbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { HttpLink } from 'apollo-angular/http';\nimport { setContext } from '@apollo/client/link/context';\nimport { ApolloLink, split } from '@apollo/client/core';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions';\nimport { createClient } from 'graphql-ws';\nimport { resolve } from './links';\nimport { WEBSOCKET } from '@nx-ddd/common/infrastructure/externals/websocket/token';\nimport * as i0 from \"@angular/core\";\nfunction isSubscription(query) {\n const definition = getMainDefinition(query);\n return (definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription');\n}\nexport class ApolloLinkService {\n httpLink = inject(HttpLink);\n WebSocketImpl = WEBSOCKET.inject();\n createGraphQLWsClient(baseUrl, getHeaders) {\n return createClient({\n url: baseUrl.replace('http', 'ws'),\n webSocketImpl: this.WebSocketImpl,\n connectionParams: async () => {\n const headers = await resolve(getHeaders);\n return { headers };\n },\n lazy: true, // 必要時のみ接続を開始\n shouldRetry: () => true, // 再接続を有効化\n retryAttempts: 5, // 再接続試行回数を制限\n keepAlive: 30000, // 30秒ごとにキープアライブ\n });\n }\n createHttpLink(baseUrl, getHeaders) {\n return ApolloLink.from([\n setContext(async () => {\n const headers = await resolve(getHeaders);\n return { headers };\n }),\n this.httpLink.create({ uri: baseUrl, }),\n ]);\n }\n createWebSocketLink(baseUrl, getHeaders) {\n return new GraphQLWsLink(this.createGraphQLWsClient(baseUrl, getHeaders));\n }\n createAutoSplitLink(baseUrl, getHeaders) {\n return split(({ query }) => isSubscription(query), this.createWebSocketLink(baseUrl, getHeaders), this.createHttpLink(baseUrl, getHeaders));\n }\n createLink(baseUrl, getHeaders) {\n return this.createAutoSplitLink(baseUrl, getHeaders);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ApolloLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ApolloLinkService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: ApolloLinkService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9oYXN1cmEvc3JjL2xpYi9hcG9sbG8vbGluay9saW5rLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFnQixLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFVLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsRCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7QUFFcEYsU0FBUyxjQUFjLENBQUMsS0FBbUI7SUFDekMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUNMLFVBQVUsQ0FBQyxJQUFJLEtBQUsscUJBQXFCO1FBQ3pDLFVBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUN4QyxDQUFDO0FBQ0osQ0FBQztBQUdELE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXBDLHFCQUFxQixDQUFDLE9BQWUsRUFBRSxVQUFzQjtRQUNuRSxPQUFPLFlBQVksQ0FBQztZQUNsQixHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2xDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxnQkFBZ0IsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhO1lBQ3pCLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVTtZQUNuQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLGFBQWE7WUFDL0IsU0FBUyxFQUFFLEtBQUssRUFBRSxnQkFBZ0I7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlLEVBQUUsVUFBc0I7UUFDcEQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtZQUNwQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQUcsQ0FBQztTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZSxFQUFFLFVBQXNCO1FBQ3pELE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFlLEVBQUUsVUFBc0I7UUFDekQsT0FBTyxLQUFLLENBQ1YsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFlLEVBQUUsVUFBc0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7dUdBM0NVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBREwsTUFBTTs7MkZBQ2xCLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBMaW5rIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBzZXRDb250ZXh0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb250ZXh0JztcbmltcG9ydCB7IEFwb2xsb0xpbmssIERvY3VtZW50Tm9kZSwgc3BsaXQgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IGdldE1haW5EZWZpbml0aW9uIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvdXRpbGl0aWVzJztcbmltcG9ydCB7IEdyYXBoUUxXc0xpbmsgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9saW5rL3N1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgQ2xpZW50LCBjcmVhdGVDbGllbnQgfSBmcm9tICdncmFwaHFsLXdzJztcbmltcG9ydCB7IEdldEhlYWRlcnMsIHJlc29sdmUgfSBmcm9tICcuL2xpbmtzJztcbmltcG9ydCB7IFdFQlNPQ0tFVCB9IGZyb20gJ0BueC1kZGQvY29tbW9uL2luZnJhc3RydWN0dXJlL2V4dGVybmFscy93ZWJzb2NrZXQvdG9rZW4nO1xuXG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbihxdWVyeTogRG9jdW1lbnROb2RlKSB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSBnZXRNYWluRGVmaW5pdGlvbihxdWVyeSk7XG4gIHJldHVybiAoXG4gICAgZGVmaW5pdGlvbi5raW5kID09PSAnT3BlcmF0aW9uRGVmaW5pdGlvbicgJiZcbiAgICBkZWZpbml0aW9uLm9wZXJhdGlvbiA9PT0gJ3N1YnNjcmlwdGlvbidcbiAgKTtcbn1cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXBvbGxvTGlua1NlcnZpY2Uge1xuICByZWFkb25seSBodHRwTGluayA9IGluamVjdChIdHRwTGluayk7XG4gIHJlYWRvbmx5IFdlYlNvY2tldEltcGwgPSBXRUJTT0NLRVQuaW5qZWN0KCk7XG5cbiAgcHJpdmF0ZSBjcmVhdGVHcmFwaFFMV3NDbGllbnQoYmFzZVVybDogc3RyaW5nLCBnZXRIZWFkZXJzOiBHZXRIZWFkZXJzKTogQ2xpZW50IHtcbiAgICByZXR1cm4gY3JlYXRlQ2xpZW50KHtcbiAgICAgIHVybDogYmFzZVVybC5yZXBsYWNlKCdodHRwJywgJ3dzJyksXG4gICAgICB3ZWJTb2NrZXRJbXBsOiB0aGlzLldlYlNvY2tldEltcGwsXG4gICAgICBjb25uZWN0aW9uUGFyYW1zOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCByZXNvbHZlKGdldEhlYWRlcnMpO1xuICAgICAgICByZXR1cm4geyBoZWFkZXJzIH07XG4gICAgICB9LFxuICAgICAgbGF6eTogdHJ1ZSwgLy8g5b+F6KaB5pmC44Gu44G/5o6l57aa44KS6ZaL5aeLXG4gICAgICBzaG91bGRSZXRyeTogKCkgPT4gdHJ1ZSwgLy8g5YaN5o6l57aa44KS5pyJ5Yq55YyWXG4gICAgICByZXRyeUF0dGVtcHRzOiA1LCAvLyDlho3mjqXntproqabooYzlm57mlbDjgpLliLbpmZBcbiAgICAgIGtlZXBBbGl2ZTogMzAwMDAsIC8vIDMw56eS44GU44Go44Gr44Kt44O844OX44Ki44Op44Kk44OWXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVIdHRwTGluayhiYXNlVXJsOiBzdHJpbmcsIGdldEhlYWRlcnM6IEdldEhlYWRlcnMpOiBBcG9sbG9MaW5rIHtcbiAgICByZXR1cm4gQXBvbGxvTGluay5mcm9tKFtcbiAgICAgIHNldENvbnRleHQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgcmVzb2x2ZShnZXRIZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIHsgaGVhZGVycyB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMuaHR0cExpbmsuY3JlYXRlKHsgdXJpOiBiYXNlVXJsLCB9KSxcbiAgICBdKTtcbiAgfVxuXG4gIGNyZWF0ZVdlYlNvY2tldExpbmsoYmFzZVVybDogc3RyaW5nLCBnZXRIZWFkZXJzOiBHZXRIZWFkZXJzKTogQXBvbGxvTGluayB7XG4gICAgcmV0dXJuIG5ldyBHcmFwaFFMV3NMaW5rKHRoaXMuY3JlYXRlR3JhcGhRTFdzQ2xpZW50KGJhc2VVcmwsIGdldEhlYWRlcnMpKTtcbiAgfVxuXG4gIGNyZWF0ZUF1dG9TcGxpdExpbmsoYmFzZVVybDogc3RyaW5nLCBnZXRIZWFkZXJzOiBHZXRIZWFkZXJzKTogQXBvbGxvTGluayB7XG4gICAgcmV0dXJuIHNwbGl0KFxuICAgICAgKHsgcXVlcnkgfSkgPT4gaXNTdWJzY3JpcHRpb24ocXVlcnkpLFxuICAgICAgdGhpcy5jcmVhdGVXZWJTb2NrZXRMaW5rKGJhc2VVcmwsIGdldEhlYWRlcnMpLFxuICAgICAgdGhpcy5jcmVhdGVIdHRwTGluayhiYXNlVXJsLCBnZXRIZWFkZXJzKVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVMaW5rKGJhc2VVcmw6IHN0cmluZywgZ2V0SGVhZGVyczogR2V0SGVhZGVycyk6IEFwb2xsb0xpbmsge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUF1dG9TcGxpdExpbmsoYmFzZVVybCwgZ2V0SGVhZGVycyk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWhhc3VyYS1hcG9sbG8tbGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvaGFzdXJhL3NyYy9saWIvYXBvbGxvL2xpbmsvbngtZGRkLWhhc3VyYS1hcG9sbG8tbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { provideWebSocket } from '@nx-ddd/common/infrastructure/externals/websocket/impl/browser';
2
+ import { provideCrypto } from '@nx-ddd/common/infrastructure/externals/crypto/impl/browser';
3
+
4
+ /**
5
+ * Provides all necessary dependencies for Hasura in browser environments
6
+ */
7
+ function provideHasuraBrowser() {
8
+ return [
9
+ ...provideWebSocket(),
10
+ provideCrypto(),
11
+ ];
12
+ }
13
+
14
+ /**
15
+ * Generated bundle index. Do not edit.
16
+ */
17
+
18
+ export { provideHasuraBrowser };
19
+ //# sourceMappingURL=nx-ddd-hasura-browser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-hasura-browser.mjs","sources":["../tmp-esm2022/browser/providers.js","../tmp-esm2022/browser/nx-ddd-hasura-browser.js"],"sourcesContent":["import { provideWebSocket } from '@nx-ddd/common/infrastructure/externals/websocket/impl/browser';\nimport { provideCrypto } from '@nx-ddd/common/infrastructure/externals/crypto/impl/browser';\n/**\n * Provides all necessary dependencies for Hasura in browser environments\n */\nexport function provideHasuraBrowser() {\n return [\n ...provideWebSocket(),\n provideCrypto(),\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9oYXN1cmEvc3JjL2xpYi9icm93c2VyL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFNUY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU87UUFDTCxHQUFHLGdCQUFnQixFQUFFO1FBQ3JCLGFBQWEsRUFBRTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwcm92aWRlV2ViU29ja2V0IH0gZnJvbSAnQG54LWRkZC9jb21tb24vaW5mcmFzdHJ1Y3R1cmUvZXh0ZXJuYWxzL3dlYnNvY2tldC9pbXBsL2Jyb3dzZXInO1xuaW1wb3J0IHsgcHJvdmlkZUNyeXB0byB9IGZyb20gJ0BueC1kZGQvY29tbW9uL2luZnJhc3RydWN0dXJlL2V4dGVybmFscy9jcnlwdG8vaW1wbC9icm93c2VyJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgSGFzdXJhIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlSGFzdXJhQnJvd3NlcigpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5wcm92aWRlV2ViU29ja2V0KCksXG4gICAgcHJvdmlkZUNyeXB0bygpLFxuICBdO1xufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWhhc3VyYS1icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9oYXN1cmEvc3JjL2xpYi9icm93c2VyL254LWRkZC1oYXN1cmEtYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;AAEA;AACA;AACA;AACO,SAAS,oBAAoB,GAAG;AACvC,IAAI,OAAO;AACX,QAAQ,GAAG,gBAAgB,EAAE;AAC7B,QAAQ,aAAa,EAAE;AACvB,KAAK;AACL;;ACVA;AACA;AACA;;;;"}
@@ -0,0 +1,19 @@
1
+ import { provideCrypto } from '@nx-ddd/common/infrastructure/externals/crypto/impl/server';
2
+ import { provideWebSocket } from '@nx-ddd/common/infrastructure/externals/websocket/impl/server';
3
+
4
+ /**
5
+ * Provides all necessary dependencies for Hasura in Node.js/server environments
6
+ */
7
+ function provideHasuraServer() {
8
+ return [
9
+ ...provideWebSocket(),
10
+ provideCrypto(),
11
+ ];
12
+ }
13
+
14
+ /**
15
+ * Generated bundle index. Do not edit.
16
+ */
17
+
18
+ export { provideHasuraServer };
19
+ //# sourceMappingURL=nx-ddd-hasura-server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-hasura-server.mjs","sources":["../tmp-esm2022/server/providers.js","../tmp-esm2022/server/nx-ddd-hasura-server.js"],"sourcesContent":["import { provideCrypto } from '@nx-ddd/common/infrastructure/externals/crypto/impl/server';\nimport { provideWebSocket } from '@nx-ddd/common/infrastructure/externals/websocket/impl/server';\n/**\n * Provides all necessary dependencies for Hasura in Node.js/server environments\n */\nexport function provideHasuraServer() {\n return [\n ...provideWebSocket(),\n provideCrypto(),\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9oYXN1cmEvc3JjL2xpYi9zZXJ2ZXIvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUVqRzs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTztRQUNMLEdBQUcsZ0JBQWdCLEVBQUU7UUFDckIsYUFBYSxFQUFFO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHByb3ZpZGVDcnlwdG8gfSBmcm9tICdAbngtZGRkL2NvbW1vbi9pbmZyYXN0cnVjdHVyZS9leHRlcm5hbHMvY3J5cHRvL2ltcGwvc2VydmVyJztcbmltcG9ydCB7IHByb3ZpZGVXZWJTb2NrZXQgfSBmcm9tICdAbngtZGRkL2NvbW1vbi9pbmZyYXN0cnVjdHVyZS9leHRlcm5hbHMvd2Vic29ja2V0L2ltcGwvc2VydmVyJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBmb3IgSGFzdXJhIGluIE5vZGUuanMvc2VydmVyIGVudmlyb25tZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUhhc3VyYVNlcnZlcigpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5wcm92aWRlV2ViU29ja2V0KCksXG4gICAgcHJvdmlkZUNyeXB0bygpLFxuICBdO1xufSJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWhhc3VyYS1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2hhc3VyYS9zcmMvbGliL3NlcnZlci9ueC1kZGQtaGFzdXJhLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;AAEA;AACA;AACA;AACO,SAAS,mBAAmB,GAAG;AACtC,IAAI,OAAO;AACX,QAAQ,GAAG,gBAAgB,EAAE;AAC7B,QAAQ,aAAa,EAAE;AACvB,KAAK;AACL;;ACVA;AACA;AACA;;;;"}