@0xobelisk/graphql-server 1.2.0-pre.100

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 (87) hide show
  1. package/.turbo/turbo-build.log +8 -0
  2. package/DUAL_POOL_CONFIG.md +188 -0
  3. package/Dockerfile +35 -0
  4. package/LICENSE +92 -0
  5. package/README.md +487 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +206 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config/subscription-config.d.ts +80 -0
  11. package/dist/config/subscription-config.d.ts.map +1 -0
  12. package/dist/config/subscription-config.js +158 -0
  13. package/dist/config/subscription-config.js.map +1 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +11 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/plugins/all-fields-filter-plugin.d.ts +4 -0
  19. package/dist/plugins/all-fields-filter-plugin.d.ts.map +1 -0
  20. package/dist/plugins/all-fields-filter-plugin.js +132 -0
  21. package/dist/plugins/all-fields-filter-plugin.js.map +1 -0
  22. package/dist/plugins/database-introspector.d.ts +23 -0
  23. package/dist/plugins/database-introspector.d.ts.map +1 -0
  24. package/dist/plugins/database-introspector.js +96 -0
  25. package/dist/plugins/database-introspector.js.map +1 -0
  26. package/dist/plugins/enhanced-playground.d.ts +9 -0
  27. package/dist/plugins/enhanced-playground.d.ts.map +1 -0
  28. package/dist/plugins/enhanced-playground.js +113 -0
  29. package/dist/plugins/enhanced-playground.js.map +1 -0
  30. package/dist/plugins/enhanced-server-manager.d.ts +29 -0
  31. package/dist/plugins/enhanced-server-manager.d.ts.map +1 -0
  32. package/dist/plugins/enhanced-server-manager.js +262 -0
  33. package/dist/plugins/enhanced-server-manager.js.map +1 -0
  34. package/dist/plugins/index.d.ts +9 -0
  35. package/dist/plugins/index.d.ts.map +1 -0
  36. package/dist/plugins/index.js +26 -0
  37. package/dist/plugins/index.js.map +1 -0
  38. package/dist/plugins/postgraphile-config.d.ts +94 -0
  39. package/dist/plugins/postgraphile-config.d.ts.map +1 -0
  40. package/dist/plugins/postgraphile-config.js +138 -0
  41. package/dist/plugins/postgraphile-config.js.map +1 -0
  42. package/dist/plugins/query-filter.d.ts +4 -0
  43. package/dist/plugins/query-filter.d.ts.map +1 -0
  44. package/dist/plugins/query-filter.js +42 -0
  45. package/dist/plugins/query-filter.js.map +1 -0
  46. package/dist/plugins/simple-naming.d.ts +4 -0
  47. package/dist/plugins/simple-naming.d.ts.map +1 -0
  48. package/dist/plugins/simple-naming.js +79 -0
  49. package/dist/plugins/simple-naming.js.map +1 -0
  50. package/dist/plugins/welcome-page.d.ts +11 -0
  51. package/dist/plugins/welcome-page.d.ts.map +1 -0
  52. package/dist/plugins/welcome-page.js +203 -0
  53. package/dist/plugins/welcome-page.js.map +1 -0
  54. package/dist/server.d.ts +21 -0
  55. package/dist/server.d.ts.map +1 -0
  56. package/dist/server.js +265 -0
  57. package/dist/server.js.map +1 -0
  58. package/dist/universal-subscriptions.d.ts +32 -0
  59. package/dist/universal-subscriptions.d.ts.map +1 -0
  60. package/dist/universal-subscriptions.js +318 -0
  61. package/dist/universal-subscriptions.js.map +1 -0
  62. package/dist/utils/logger/index.d.ts +80 -0
  63. package/dist/utils/logger/index.d.ts.map +1 -0
  64. package/dist/utils/logger/index.js +230 -0
  65. package/dist/utils/logger/index.js.map +1 -0
  66. package/docker-compose.yml +46 -0
  67. package/eslint.config.mjs +3 -0
  68. package/package.json +78 -0
  69. package/src/cli.ts +232 -0
  70. package/src/config/subscription-config.ts +243 -0
  71. package/src/index.ts +11 -0
  72. package/src/plugins/README.md +138 -0
  73. package/src/plugins/all-fields-filter-plugin.ts +158 -0
  74. package/src/plugins/database-introspector.ts +126 -0
  75. package/src/plugins/enhanced-playground.ts +121 -0
  76. package/src/plugins/enhanced-server-manager.ts +314 -0
  77. package/src/plugins/index.ts +9 -0
  78. package/src/plugins/postgraphile-config.ts +182 -0
  79. package/src/plugins/query-filter.ts +50 -0
  80. package/src/plugins/simple-naming.ts +105 -0
  81. package/src/plugins/welcome-page.ts +218 -0
  82. package/src/server.ts +324 -0
  83. package/src/universal-subscriptions.ts +397 -0
  84. package/src/utils/logger/README.md +209 -0
  85. package/src/utils/logger/index.ts +275 -0
  86. package/sui-indexer-schema.graphql +3691 -0
  87. package/tsconfig.json +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ export interface SubscriptionCapabilities {
2
+ liveQueries: boolean;
3
+ pgSubscriptions: boolean;
4
+ nativeWebSocket: boolean;
5
+ }
6
+ export interface SubscriptionConfig {
7
+ enableSubscriptions: boolean;
8
+ capabilities: SubscriptionCapabilities;
9
+ walLevel: 'minimal' | 'replica' | 'logical';
10
+ graphqlPort: number;
11
+ websocketPort?: number;
12
+ maxConnections: number;
13
+ heartbeatInterval: number;
14
+ enableNotificationLogging: boolean;
15
+ enablePerformanceMetrics: boolean;
16
+ }
17
+ export interface SubscriptionConfigInput {
18
+ enableSubscriptions: boolean;
19
+ databaseUrl: string;
20
+ port: string;
21
+ enableLiveQueries?: boolean;
22
+ enablePgSubscriptions?: boolean;
23
+ enableNativeWebSocket?: boolean;
24
+ realtimePort?: string;
25
+ maxConnections?: string;
26
+ heartbeatInterval?: string;
27
+ debugNotifications?: boolean;
28
+ enableMetrics?: boolean;
29
+ }
30
+ export declare class SubscriptionConfigManager {
31
+ private config;
32
+ constructor(configInput: SubscriptionConfigInput);
33
+ private parseConfigInput;
34
+ private detectWalLevel;
35
+ getConfig(): SubscriptionConfig;
36
+ getRecommendedSubscriptionMethod(): string;
37
+ generateClientConfig(): {
38
+ graphqlEndpoint: string;
39
+ subscriptionEndpoint: string | undefined;
40
+ nativeWebSocketEndpoint: string | undefined;
41
+ capabilities: SubscriptionCapabilities;
42
+ recommendedMethod: string;
43
+ };
44
+ generatePostGraphileConfig(): {
45
+ subscriptions: boolean;
46
+ live: boolean;
47
+ simpleSubscriptions: boolean;
48
+ pgSettings: {
49
+ statement_timeout: string;
50
+ default_transaction_isolation: string;
51
+ };
52
+ allowExplain: boolean;
53
+ disableQueryLog: boolean;
54
+ };
55
+ generateDocumentation(): string;
56
+ }
57
+ export declare const subscriptionConfig: {
58
+ getConfig(): SubscriptionConfig;
59
+ generateClientConfig(): {
60
+ graphqlEndpoint: string;
61
+ subscriptionEndpoint: string | undefined;
62
+ nativeWebSocketEndpoint: string | undefined;
63
+ capabilities: SubscriptionCapabilities;
64
+ recommendedMethod: string;
65
+ };
66
+ generatePostGraphileConfig(): {
67
+ subscriptions: boolean;
68
+ live: boolean;
69
+ simpleSubscriptions: boolean;
70
+ pgSettings: {
71
+ statement_timeout: string;
72
+ default_transaction_isolation: string;
73
+ };
74
+ allowExplain: boolean;
75
+ disableQueryLog: boolean;
76
+ };
77
+ generateDocumentation(): string;
78
+ refresh(configInput: SubscriptionConfigInput): void;
79
+ };
80
+ //# sourceMappingURL=subscription-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-config.d.ts","sourceRoot":"","sources":["../../src/config/subscription-config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAEjC,mBAAmB,EAAE,OAAO,CAAC;IAG7B,YAAY,EAAE,wBAAwB,CAAC;IAGvC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAG5C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,yBAAyB,EAAE,OAAO,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAGD,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,WAAW,EAAE,uBAAuB;IAKhD,OAAO,CAAC,gBAAgB;IAiCxB,OAAO,CAAC,cAAc;IAStB,SAAS,IAAI,kBAAkB;IAK/B,gCAAgC,IAAI,MAAM;IAa1C,oBAAoB;;;;;;;IAkBpB,0BAA0B;;;;;;;;;;;IAmB1B,qBAAqB,IAAI,MAAM;CA6ChC;AAKD,eAAO,MAAM,kBAAkB;iBAChB,kBAAkB;;;;;;;;;;;;;;;;;;;6BA2BN,MAAM;yBAUV,uBAAuB;CAG7C,CAAC"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ // Subscription configuration manager - supports dynamic configuration for three subscription modes
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.subscriptionConfig = exports.SubscriptionConfigManager = void 0;
5
+ class SubscriptionConfigManager {
6
+ config;
7
+ constructor(configInput) {
8
+ this.config = this.parseConfigInput(configInput);
9
+ }
10
+ // Parse configuration from input parameters
11
+ parseConfigInput(input) {
12
+ const enableSubscriptions = input.enableSubscriptions;
13
+ // Auto-detect WAL level (in actual applications, query through database)
14
+ const walLevel = this.detectWalLevel(input.databaseUrl);
15
+ // Determine capabilities based on input parameters - default enable all features when subscriptions are enabled
16
+ const capabilities = {
17
+ liveQueries: enableSubscriptions && input.enableLiveQueries !== false && walLevel === 'logical',
18
+ pgSubscriptions: enableSubscriptions && input.enablePgSubscriptions !== false,
19
+ nativeWebSocket: enableSubscriptions && input.enableNativeWebSocket !== false
20
+ };
21
+ return {
22
+ enableSubscriptions,
23
+ capabilities,
24
+ walLevel,
25
+ graphqlPort: parseInt(input.port),
26
+ websocketPort: input.realtimePort ? parseInt(input.realtimePort) : undefined,
27
+ maxConnections: parseInt(input.maxConnections || '1000'),
28
+ heartbeatInterval: parseInt(input.heartbeatInterval || '30000'),
29
+ enableNotificationLogging: input.debugNotifications === true,
30
+ enablePerformanceMetrics: input.enableMetrics === true
31
+ };
32
+ }
33
+ // Detect database WAL level
34
+ detectWalLevel(_databaseUrl) {
35
+ // In actual applications should query database
36
+ // SELECT setting FROM pg_settings WHERE name = 'wal_level';
37
+ // Currently return default value
38
+ return 'replica';
39
+ }
40
+ // Get current configuration
41
+ getConfig() {
42
+ return { ...this.config };
43
+ }
44
+ // Get recommended subscription method
45
+ getRecommendedSubscriptionMethod() {
46
+ if (this.config.capabilities.liveQueries) {
47
+ return 'live-queries';
48
+ }
49
+ else if (this.config.capabilities.pgSubscriptions) {
50
+ return 'pg-subscriptions';
51
+ }
52
+ else if (this.config.capabilities.nativeWebSocket) {
53
+ return 'native-websocket';
54
+ }
55
+ else {
56
+ return 'none';
57
+ }
58
+ }
59
+ // Generate client configuration
60
+ generateClientConfig() {
61
+ const baseUrl = `http://localhost:${this.config.graphqlPort}`;
62
+ return {
63
+ graphqlEndpoint: `${baseUrl}/graphql`,
64
+ subscriptionEndpoint: this.config.capabilities.pgSubscriptions || this.config.capabilities.liveQueries
65
+ ? `ws://localhost:${this.config.graphqlPort}/graphql`
66
+ : undefined,
67
+ nativeWebSocketEndpoint: this.config.capabilities.nativeWebSocket
68
+ ? `ws://localhost:${this.config.websocketPort || this.config.graphqlPort}`
69
+ : undefined,
70
+ capabilities: this.config.capabilities,
71
+ recommendedMethod: this.getRecommendedSubscriptionMethod()
72
+ };
73
+ }
74
+ // Generate PostGraphile configuration - simplified version, only keep listen subscriptions
75
+ generatePostGraphileConfig() {
76
+ return {
77
+ subscriptions: this.config.enableSubscriptions,
78
+ live: false, // Disable live queries, only use listen subscriptions
79
+ simpleSubscriptions: this.config.capabilities.pgSubscriptions,
80
+ // Performance configuration - optimized for listen subscriptions
81
+ pgSettings: {
82
+ statement_timeout: '30s',
83
+ default_transaction_isolation: 'read committed'
84
+ },
85
+ // Monitoring configuration
86
+ allowExplain: this.config.enablePerformanceMetrics,
87
+ disableQueryLog: !this.config.enableNotificationLogging
88
+ };
89
+ }
90
+ // Generate environment variable documentation
91
+ generateDocumentation() {
92
+ return `
93
+ # 📡 Subscription System Configuration Guide
94
+
95
+ ## Basic Configuration
96
+ enableSubscriptions=${this.config.enableSubscriptions} # Enable/disable subscription features
97
+
98
+ ## Capability Configuration (optional, auto-detect by default)
99
+ enableLiveQueries=${this.config.capabilities.liveQueries} # Enable @live directive (requires wal_level=logical)
100
+ enablePgSubscriptions=${this.config.capabilities.pgSubscriptions} # Enable PostgreSQL subscriptions
101
+ enableNativeWebSocket=${this.config.capabilities.nativeWebSocket} # Enable native WebSocket
102
+
103
+ ## Port Configuration
104
+ port=${this.config.graphqlPort} # GraphQL port
105
+ realtimePort=${this.config.websocketPort || 'undefined'} # Native WebSocket port (optional)
106
+
107
+ ## Performance Configuration
108
+ maxConnections=${this.config.maxConnections} # Maximum connections
109
+ heartbeatInterval=${this.config.heartbeatInterval} # Heartbeat interval (ms)
110
+
111
+ ## Debug Configuration
112
+ debugNotifications=${this.config.enableNotificationLogging} # Notification logging
113
+ enableMetrics=${this.config.enablePerformanceMetrics} # Performance metrics
114
+
115
+ ## Current Configuration Status:
116
+ - Subscription Features: ${this.config.enableSubscriptions ? '✅ Enabled' : '❌ Disabled'}
117
+ - Live Queries: ${this.config.capabilities.liveQueries ? '✅ Available' : '❌ Not Available'}
118
+ - PG Subscriptions: ${this.config.capabilities.pgSubscriptions ? '✅ Available' : '❌ Not Available'}
119
+ - Native WebSocket: ${this.config.capabilities.nativeWebSocket ? '✅ Available' : '❌ Not Available'}
120
+ - WAL Level: ${this.config.walLevel}
121
+ - Recommended Method: ${this.getRecommendedSubscriptionMethod()}
122
+ `;
123
+ }
124
+ }
125
+ exports.SubscriptionConfigManager = SubscriptionConfigManager;
126
+ // Export singleton instance - lazy initialization
127
+ let _subscriptionConfigInstance = null;
128
+ exports.subscriptionConfig = {
129
+ getConfig() {
130
+ if (!_subscriptionConfigInstance) {
131
+ throw new Error('Subscription config not initialized. Call refresh() first with configuration.');
132
+ }
133
+ return _subscriptionConfigInstance.getConfig();
134
+ },
135
+ generateClientConfig() {
136
+ if (!_subscriptionConfigInstance) {
137
+ throw new Error('Subscription config not initialized. Call refresh() first with configuration.');
138
+ }
139
+ return _subscriptionConfigInstance.generateClientConfig();
140
+ },
141
+ generatePostGraphileConfig() {
142
+ if (!_subscriptionConfigInstance) {
143
+ throw new Error('Subscription config not initialized. Call refresh() first with configuration.');
144
+ }
145
+ return _subscriptionConfigInstance.generatePostGraphileConfig();
146
+ },
147
+ generateDocumentation() {
148
+ if (!_subscriptionConfigInstance) {
149
+ throw new Error('Subscription config not initialized. Call refresh() first with configuration.');
150
+ }
151
+ return _subscriptionConfigInstance.generateDocumentation();
152
+ },
153
+ // Initialize/refresh configuration with input parameters
154
+ refresh(configInput) {
155
+ _subscriptionConfigInstance = new SubscriptionConfigManager(configInput);
156
+ }
157
+ };
158
+ //# sourceMappingURL=subscription-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-config.js","sourceRoot":"","sources":["../../src/config/subscription-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // import { startServer } from './server';
3
+ // import { systemLogger } from './utils/logger';
4
+ // // // Start application
5
+ // // systemLogger.info('🚀 Starting Sui Indexer GraphQL Server (Express Architecture)...', {
6
+ // // nodeVersion: process.version,
7
+ // // platform: process.platform,
8
+ // // pid: process.pid
9
+ // // });
10
+ // // startServer();
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,iDAAiD;AAEjD,0BAA0B;AAC1B,6FAA6F;AAC7F,qCAAqC;AACrC,mCAAmC;AACnC,wBAAwB;AACxB,SAAS;AAET,oBAAoB"}
@@ -0,0 +1,4 @@
1
+ import { Plugin } from 'postgraphile';
2
+ export declare const AllFieldsFilterPlugin: Plugin;
3
+ export default AllFieldsFilterPlugin;
4
+ //# sourceMappingURL=all-fields-filter-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-fields-filter-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/all-fields-filter-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,eAAO,MAAM,qBAAqB,EAAE,MAwJnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AllFieldsFilterPlugin = void 0;
4
+ // All fields filter plugin - ensure all fields support filtering
5
+ const AllFieldsFilterPlugin = (builder) => {
6
+ // Extend filter input type, add filter support for all fields
7
+ builder.hook('GraphQLInputObjectType:fields', (fields, build, context) => {
8
+ const { scope: { isPgConnectionFilter, pgIntrospection: table } } = context;
9
+ // Only handle connection filters
10
+ if (!isPgConnectionFilter || !table || table.kind !== 'class') {
11
+ return fields;
12
+ }
13
+ const enhancedFields = { ...fields };
14
+ // Add filters for each field of the table
15
+ table.attributes.forEach((attr) => {
16
+ const fieldName = build.inflection.column(attr);
17
+ // Skip fields that already exist
18
+ if (enhancedFields[fieldName]) {
19
+ return;
20
+ }
21
+ // Determine filter type based on field type
22
+ let filterType;
23
+ const pgType = attr.type;
24
+ // Special handling for BigInt type
25
+ if (pgType.name === 'int8' || pgType.name === 'bigint') {
26
+ // For BigInt type, try to use StringFilter (because BigInt is represented as string in GraphQL)
27
+ filterType = build.getTypeByName('StringFilter');
28
+ }
29
+ else {
30
+ // Map PostgreSQL types to GraphQL filter types
31
+ switch (pgType.category) {
32
+ case 'S': // String type
33
+ filterType = build.getTypeByName('StringFilter');
34
+ break;
35
+ case 'N': // Numeric type
36
+ if (pgType.name.includes('int')) {
37
+ filterType = build.getTypeByName('IntFilter');
38
+ }
39
+ else {
40
+ filterType = build.getTypeByName('FloatFilter');
41
+ }
42
+ break;
43
+ case 'B': // Boolean type
44
+ filterType = build.getTypeByName('BooleanFilter');
45
+ break;
46
+ case 'D': // Date/time type
47
+ filterType = build.getTypeByName('DatetimeFilter');
48
+ break;
49
+ default:
50
+ // For other types, use string filter as default
51
+ filterType = build.getTypeByName('StringFilter');
52
+ }
53
+ }
54
+ // If specific filter type not found, use string filter
55
+ if (!filterType) {
56
+ filterType = build.getTypeByName('StringFilter');
57
+ }
58
+ // Add field filter
59
+ if (filterType) {
60
+ enhancedFields[fieldName] = {
61
+ type: filterType,
62
+ description: `Filter by the object's \`${attr.name}\` field.`
63
+ };
64
+ }
65
+ });
66
+ return enhancedFields;
67
+ });
68
+ // Ensure sorting options are generated for all fields
69
+ builder.hook('GraphQLEnumType:values', (values, build, context) => {
70
+ const { scope: { isPgRowSortEnum, pgIntrospection: table } } = context;
71
+ if (!isPgRowSortEnum || !table || table.kind !== 'class') {
72
+ return values;
73
+ }
74
+ const enhancedValues = { ...values };
75
+ // Add ASC and DESC sorting options for each field
76
+ table.attributes.forEach((attr) => {
77
+ const columnName = build.inflection.column(attr);
78
+ const enumName = build.inflection.constantCase(columnName);
79
+ // Add ascending sort
80
+ const ascKey = `${enumName}_ASC`;
81
+ if (!enhancedValues[ascKey]) {
82
+ enhancedValues[ascKey] = {
83
+ value: {
84
+ alias: `${attr.name.toLowerCase()}_ASC`,
85
+ specs: [[attr.name, true]]
86
+ },
87
+ description: `Sorts by ${attr.name} in ascending order.`
88
+ };
89
+ }
90
+ // Add descending sort
91
+ const descKey = `${enumName}_DESC`;
92
+ if (!enhancedValues[descKey]) {
93
+ enhancedValues[descKey] = {
94
+ value: {
95
+ alias: `${attr.name.toLowerCase()}_DESC`,
96
+ specs: [[attr.name, false]]
97
+ },
98
+ description: `Sorts by ${attr.name} in descending order.`
99
+ };
100
+ }
101
+ });
102
+ return enhancedValues;
103
+ });
104
+ // Extend condition filters to support all fields
105
+ builder.hook('GraphQLInputObjectType:fields', (fields, build, context) => {
106
+ const { scope: { isPgCondition, pgIntrospection: table } } = context;
107
+ if (!isPgCondition || !table || table.kind !== 'class') {
108
+ return fields;
109
+ }
110
+ const enhancedFields = { ...fields };
111
+ // Add condition filters for each field
112
+ table.attributes.forEach((attr) => {
113
+ const fieldName = build.inflection.column(attr);
114
+ // Skip fields that already exist
115
+ if (enhancedFields[fieldName]) {
116
+ return;
117
+ }
118
+ // Get GraphQL type
119
+ const gqlType = build.pgGetGqlTypeByTypeIdAndModifier(attr.typeId, attr.typeModifier);
120
+ if (gqlType) {
121
+ enhancedFields[fieldName] = {
122
+ type: gqlType,
123
+ description: `Checks for equality with the object's \`${attr.name}\` field.`
124
+ };
125
+ }
126
+ });
127
+ return enhancedFields;
128
+ });
129
+ };
130
+ exports.AllFieldsFilterPlugin = AllFieldsFilterPlugin;
131
+ exports.default = exports.AllFieldsFilterPlugin;
132
+ //# sourceMappingURL=all-fields-filter-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-fields-filter-plugin.js","sourceRoot":"","sources":["../../src/plugins/all-fields-filter-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Pool } from 'pg';
2
+ export interface TableField {
3
+ field_name: string;
4
+ field_type: string;
5
+ field_index: number | null;
6
+ is_key: boolean;
7
+ }
8
+ export interface DynamicTable {
9
+ table_name: string;
10
+ fields: TableField[];
11
+ }
12
+ export declare class DatabaseIntrospector {
13
+ private pool;
14
+ private schema;
15
+ constructor(pool: Pool, schema?: string);
16
+ getStoreTables(): Promise<string[]>;
17
+ getSystemTables(): Promise<string[]>;
18
+ getDynamicTableFields(tableName: string): Promise<TableField[]>;
19
+ getSystemTableFields(tableName: string): Promise<TableField[]>;
20
+ getAllTables(): Promise<DynamicTable[]>;
21
+ testConnection(): Promise<boolean>;
22
+ }
23
+ //# sourceMappingURL=database-introspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-introspector.d.ts","sourceRoot":"","sources":["../../src/plugins/database-introspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAGD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,IAAI;IAAQ,OAAO,CAAC,MAAM;gBAA1B,IAAI,EAAE,IAAI,EAAU,MAAM,GAAE,MAAiB;IAG3D,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBnC,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBpC,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkB/D,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmB9D,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2BvC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CASzC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseIntrospector = void 0;
4
+ // Scan database table structure
5
+ class DatabaseIntrospector {
6
+ pool;
7
+ schema;
8
+ constructor(pool, schema = 'public') {
9
+ this.pool = pool;
10
+ this.schema = schema;
11
+ }
12
+ // Get all dynamically created store_* tables
13
+ async getStoreTables() {
14
+ const result = await this.pool.query(`
15
+ SELECT table_name
16
+ FROM information_schema.tables
17
+ WHERE table_schema = $1
18
+ AND table_name LIKE 'store_%'
19
+ ORDER BY table_name
20
+ `, [this.schema]);
21
+ return result.rows.map((row) => row.table_name);
22
+ }
23
+ // Get system tables (dubhe related tables)
24
+ async getSystemTables() {
25
+ const result = await this.pool.query(`
26
+ SELECT table_name
27
+ FROM information_schema.tables
28
+ WHERE table_schema = $1
29
+ AND (table_name = 'table_fields')
30
+ ORDER BY table_name
31
+ `, [this.schema]);
32
+ return result.rows.map((row) => row.table_name);
33
+ }
34
+ // Get dynamic table field information from table_fields table
35
+ async getDynamicTableFields(tableName) {
36
+ // Extract table name (remove store_ prefix)
37
+ const baseTableName = tableName.replace('store_', '');
38
+ const result = await this.pool.query(`
39
+ SELECT field_name, field_type, field_index, is_key
40
+ FROM table_fields
41
+ WHERE table_name = $1
42
+ ORDER BY is_key DESC, field_index ASC
43
+ `, [baseTableName]);
44
+ return result.rows;
45
+ }
46
+ // Get field information from system tables
47
+ async getSystemTableFields(tableName) {
48
+ const result = await this.pool.query(`
49
+ SELECT
50
+ column_name as field_name,
51
+ data_type as field_type,
52
+ ordinal_position as field_index,
53
+ CASE WHEN column_name = 'entity_id' THEN true ELSE false END as is_key
54
+ FROM information_schema.columns
55
+ WHERE table_schema = $1 AND table_name = $2
56
+ ORDER BY ordinal_position
57
+ `, [this.schema, tableName]);
58
+ return result.rows;
59
+ }
60
+ // Get complete information for all tables
61
+ async getAllTables() {
62
+ const storeTables = await this.getStoreTables();
63
+ const systemTables = await this.getSystemTables();
64
+ const allTables = [];
65
+ // Process dynamic tables
66
+ for (const tableName of storeTables) {
67
+ const fields = await this.getDynamicTableFields(tableName);
68
+ allTables.push({
69
+ table_name: tableName,
70
+ fields
71
+ });
72
+ }
73
+ // Process system tables
74
+ for (const tableName of systemTables) {
75
+ const fields = await this.getSystemTableFields(tableName);
76
+ allTables.push({
77
+ table_name: tableName,
78
+ fields
79
+ });
80
+ }
81
+ return allTables;
82
+ }
83
+ // Test database connection
84
+ async testConnection() {
85
+ try {
86
+ await this.pool.query('SELECT NOW() as current_time');
87
+ return true;
88
+ }
89
+ catch (error) {
90
+ console.error('Database connection test failed:', error);
91
+ return false;
92
+ }
93
+ }
94
+ }
95
+ exports.DatabaseIntrospector = DatabaseIntrospector;
96
+ //# sourceMappingURL=database-introspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-introspector.js","sourceRoot":"","sources":["../../src/plugins/database-introspector.ts"],"names":[],"mappings":";;;AAeA,gCAAgC;AAChC,MAAa,oBAAoB;IACX;IAAoB;IAAxC,YAAoB,IAAU,EAAU,SAAiB,QAAQ;QAA7C,SAAI,GAAJ,IAAI,CAAM;QAAU,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAErE,6CAA6C;IAC7C,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC;;;;;;GAMH,EACG,CAAC,IAAI,CAAC,MAAM,CAAC,CACd,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC;;;;;;GAMH,EACG,CAAC,IAAI,CAAC,MAAM,CAAC,CACd,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAC3C,4CAA4C;QAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC;;;;;GAKH,EACG,CAAC,aAAa,CAAC,CAChB,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC;;;;;;;;;GASH,EACG,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CACzB,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,YAAY;QAChB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,SAAS,GAAmB,EAAE,CAAC;QAErC,yBAAyB;QACzB,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,SAAS;gBACrB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC1D,SAAS,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,SAAS;gBACrB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AA7GD,oDA6GC"}
@@ -0,0 +1,9 @@
1
+ import type { IncomingMessage, ServerResponse } from 'http';
2
+ export interface PlaygroundOptions {
3
+ url: string;
4
+ subscriptionUrl?: string;
5
+ title?: string;
6
+ subtitle?: string;
7
+ }
8
+ export declare function createEnhancedPlayground(options: PlaygroundOptions): (req: IncomingMessage, res: ServerResponse, config?: any) => string;
9
+ //# sourceMappingURL=enhanced-playground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-playground.d.ts","sourceRoot":"","sources":["../../src/plugins/enhanced-playground.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,GACzB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,MAAM,CA0GrE"}