@objectql/core 4.2.0 → 4.2.2

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 (116) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +5 -2
  4. package/dist/app.d.ts +61 -52
  5. package/dist/app.js +100 -435
  6. package/dist/app.js.map +1 -1
  7. package/dist/index.d.ts +14 -20
  8. package/dist/index.js +21 -20
  9. package/dist/index.js.map +1 -1
  10. package/dist/kernel-factory.d.ts +38 -0
  11. package/dist/kernel-factory.js +38 -0
  12. package/dist/kernel-factory.js.map +1 -0
  13. package/dist/plugin.d.ts +9 -16
  14. package/dist/plugin.js +71 -48
  15. package/dist/plugin.js.map +1 -1
  16. package/dist/repository.d.ts +4 -31
  17. package/dist/repository.js +7 -283
  18. package/dist/repository.js.map +1 -1
  19. package/dist/util.js +4 -2
  20. package/dist/util.js.map +1 -1
  21. package/package.json +14 -12
  22. package/src/app.ts +156 -539
  23. package/src/index.ts +18 -42
  24. package/src/kernel-factory.ts +47 -0
  25. package/src/plugin.ts +77 -85
  26. package/src/repository.ts +4 -320
  27. package/src/util.ts +5 -3
  28. package/test/__mocks__/@objectstack/core.ts +250 -1
  29. package/test/__mocks__/@objectstack/objectql.ts +273 -0
  30. package/test/__mocks__/@objectstack/runtime.ts +14 -5
  31. package/test/introspection.test.ts +1 -1
  32. package/test/mock-driver.ts +5 -5
  33. package/test/optimizations.test.ts +2 -2
  34. package/test/plugin-integration.test.ts +1 -3
  35. package/test/utils.ts +6 -6
  36. package/tsconfig.json +3 -1
  37. package/tsconfig.tsbuildinfo +1 -1
  38. package/dist/ai/index.d.ts +0 -8
  39. package/dist/ai/index.js +0 -25
  40. package/dist/ai/index.js.map +0 -1
  41. package/dist/ai/registry.d.ts +0 -23
  42. package/dist/ai/registry.js +0 -78
  43. package/dist/ai/registry.js.map +0 -1
  44. package/dist/gateway.d.ts +0 -37
  45. package/dist/gateway.js +0 -93
  46. package/dist/gateway.js.map +0 -1
  47. package/dist/optimizations/CompiledHookManager.d.ts +0 -56
  48. package/dist/optimizations/CompiledHookManager.js +0 -170
  49. package/dist/optimizations/CompiledHookManager.js.map +0 -1
  50. package/dist/optimizations/DependencyGraph.d.ts +0 -82
  51. package/dist/optimizations/DependencyGraph.js +0 -211
  52. package/dist/optimizations/DependencyGraph.js.map +0 -1
  53. package/dist/optimizations/GlobalConnectionPool.d.ts +0 -89
  54. package/dist/optimizations/GlobalConnectionPool.js +0 -193
  55. package/dist/optimizations/GlobalConnectionPool.js.map +0 -1
  56. package/dist/optimizations/LazyMetadataLoader.d.ts +0 -75
  57. package/dist/optimizations/LazyMetadataLoader.js +0 -149
  58. package/dist/optimizations/LazyMetadataLoader.js.map +0 -1
  59. package/dist/optimizations/OptimizedMetadataRegistry.d.ts +0 -26
  60. package/dist/optimizations/OptimizedMetadataRegistry.js +0 -117
  61. package/dist/optimizations/OptimizedMetadataRegistry.js.map +0 -1
  62. package/dist/optimizations/OptimizedValidationEngine.d.ts +0 -73
  63. package/dist/optimizations/OptimizedValidationEngine.js +0 -141
  64. package/dist/optimizations/OptimizedValidationEngine.js.map +0 -1
  65. package/dist/optimizations/QueryCompiler.d.ts +0 -51
  66. package/dist/optimizations/QueryCompiler.js +0 -216
  67. package/dist/optimizations/QueryCompiler.js.map +0 -1
  68. package/dist/optimizations/SQLQueryOptimizer.d.ts +0 -96
  69. package/dist/optimizations/SQLQueryOptimizer.js +0 -265
  70. package/dist/optimizations/SQLQueryOptimizer.js.map +0 -1
  71. package/dist/optimizations/index.d.ts +0 -32
  72. package/dist/optimizations/index.js +0 -44
  73. package/dist/optimizations/index.js.map +0 -1
  74. package/dist/protocol.d.ts +0 -191
  75. package/dist/protocol.js +0 -272
  76. package/dist/protocol.js.map +0 -1
  77. package/dist/query/filter-translator.d.ts +0 -24
  78. package/dist/query/filter-translator.js +0 -38
  79. package/dist/query/filter-translator.js.map +0 -1
  80. package/dist/query/index.d.ts +0 -22
  81. package/dist/query/index.js +0 -39
  82. package/dist/query/index.js.map +0 -1
  83. package/dist/query/query-analyzer.d.ts +0 -186
  84. package/dist/query/query-analyzer.js +0 -348
  85. package/dist/query/query-analyzer.js.map +0 -1
  86. package/dist/query/query-builder.d.ts +0 -27
  87. package/dist/query/query-builder.js +0 -69
  88. package/dist/query/query-builder.js.map +0 -1
  89. package/dist/query/query-service.d.ts +0 -151
  90. package/dist/query/query-service.js +0 -272
  91. package/dist/query/query-service.js.map +0 -1
  92. package/src/ai/index.ts +0 -9
  93. package/src/ai/registry.ts +0 -81
  94. package/src/gateway.ts +0 -105
  95. package/src/optimizations/CompiledHookManager.ts +0 -193
  96. package/src/optimizations/DependencyGraph.ts +0 -255
  97. package/src/optimizations/GlobalConnectionPool.ts +0 -251
  98. package/src/optimizations/LazyMetadataLoader.ts +0 -180
  99. package/src/optimizations/OptimizedMetadataRegistry.ts +0 -132
  100. package/src/optimizations/OptimizedValidationEngine.ts +0 -172
  101. package/src/optimizations/QueryCompiler.ts +0 -242
  102. package/src/optimizations/SQLQueryOptimizer.ts +0 -329
  103. package/src/optimizations/index.ts +0 -34
  104. package/src/protocol.ts +0 -304
  105. package/src/query/filter-translator.ts +0 -41
  106. package/src/query/index.ts +0 -24
  107. package/src/query/query-analyzer.ts +0 -532
  108. package/src/query/query-builder.ts +0 -64
  109. package/src/query/query-service.ts +0 -397
  110. package/test/ai-registry.test.ts +0 -42
  111. package/test/app.test.ts +0 -578
  112. package/test/filter-syntax.test.ts +0 -233
  113. package/test/gateway.test.ts +0 -88
  114. package/test/protocol.test.ts +0 -143
  115. package/test/repository-validation.test.ts +0 -351
  116. package/test/repository.test.ts +0 -151
package/dist/gateway.d.ts DELETED
@@ -1,37 +0,0 @@
1
- /**
2
- * ObjectQL
3
- * Copyright (c) 2026-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- import { ApiRequest, ApiResponse, GatewayProtocol, Logger } from '@objectql/types';
9
- export type RequestTransformer = (request: ApiRequest) => Promise<ApiRequest>;
10
- export type ResponseTransformer = (response: ApiResponse) => Promise<ApiResponse>;
11
- /**
12
- * Unified API Gateway
13
- * Routtes generic API requests to specific protocol implementations
14
- */
15
- export declare class ObjectGateway {
16
- private protocols;
17
- private requestTransforms;
18
- private responseTransforms;
19
- private logger;
20
- constructor(protocols?: GatewayProtocol[], logger?: Logger);
21
- /**
22
- * Register a new protocol handler
23
- */
24
- registerProtocol(protocol: GatewayProtocol): void;
25
- /**
26
- * Add a request transformer (middleware)
27
- */
28
- addRequestTransform(transformer: RequestTransformer): void;
29
- /**
30
- * Add a response transformer (middleware)
31
- */
32
- addResponseTransform(transformer: ResponseTransformer): void;
33
- /**
34
- * Handle an incoming API request
35
- */
36
- handle(request: ApiRequest): Promise<ApiResponse>;
37
- }
package/dist/gateway.js DELETED
@@ -1,93 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ObjectGateway = void 0;
11
- const types_1 = require("@objectql/types");
12
- /**
13
- * Unified API Gateway
14
- * Routtes generic API requests to specific protocol implementations
15
- */
16
- class ObjectGateway {
17
- constructor(protocols = [], logger) {
18
- this.protocols = [];
19
- this.requestTransforms = [];
20
- this.responseTransforms = [];
21
- this.protocols = protocols;
22
- this.logger = logger !== null && logger !== void 0 ? logger : new types_1.ConsoleLogger({ name: '@objectql/gateway', level: 'info' });
23
- }
24
- /**
25
- * Register a new protocol handler
26
- */
27
- registerProtocol(protocol) {
28
- this.protocols.push(protocol);
29
- }
30
- /**
31
- * Add a request transformer (middleware)
32
- */
33
- addRequestTransform(transformer) {
34
- this.requestTransforms.push(transformer);
35
- }
36
- /**
37
- * Add a response transformer (middleware)
38
- */
39
- addResponseTransform(transformer) {
40
- this.responseTransforms.push(transformer);
41
- }
42
- /**
43
- * Handle an incoming API request
44
- */
45
- async handle(request) {
46
- let req = request;
47
- // 1. Apply Request Transforms
48
- for (const transform of this.requestTransforms) {
49
- req = await transform(req);
50
- }
51
- // 2. Find matching protocol
52
- const protocol = this.protocols.find(p => p.route(req));
53
- if (!protocol) {
54
- return {
55
- status: 404,
56
- headers: { 'Content-Type': 'application/json' },
57
- body: {
58
- error: {
59
- code: 'PROTOCOL_NOT_FOUND',
60
- message: `No protocol found to handle path: ${req.path}`
61
- }
62
- }
63
- };
64
- }
65
- let response;
66
- // 3. Delegate to protocol
67
- try {
68
- response = await protocol.handle(req);
69
- }
70
- catch (error) {
71
- this.logger.error(`Error in ${protocol.name}`, error, {
72
- protocol: protocol.name,
73
- });
74
- response = {
75
- status: 500,
76
- headers: { 'Content-Type': 'application/json' },
77
- body: {
78
- error: {
79
- code: 'INTERNAL_ERROR',
80
- message: error.message || 'Internal Gateway Error'
81
- }
82
- }
83
- };
84
- }
85
- // 4. Apply Response Transforms
86
- for (const transform of this.responseTransforms) {
87
- response = await transform(response);
88
- }
89
- return response;
90
- }
91
- }
92
- exports.ObjectGateway = ObjectGateway;
93
- //# sourceMappingURL=gateway.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,2CAAkG;AAKlG;;;GAGG;AACH,MAAa,aAAa;IAMtB,YAAY,YAA+B,EAAE,EAAE,MAAe;QALtD,cAAS,GAAsB,EAAE,CAAC;QAClC,sBAAiB,GAAyB,EAAE,CAAC;QAC7C,uBAAkB,GAA0B,EAAE,CAAC;QAInD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,qBAAa,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAyB;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,WAA+B;QAC/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,WAAgC;QACjD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC5B,IAAI,GAAG,GAAG,OAAO,CAAC;QAElB,8BAA8B;QAC9B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;gBACH,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE;oBACF,KAAK,EAAE;wBACH,IAAI,EAAE,oBAAoB;wBAC1B,OAAO,EAAE,qCAAqC,GAAG,CAAC,IAAI,EAAE;qBAC3D;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,IAAI,QAAqB,CAAC;QAE1B,0BAA0B;QAC1B,IAAI,CAAC;YACD,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAc,EAAE;gBAC3D,QAAQ,EAAE,QAAQ,CAAC,IAAI;aAC1B,CAAC,CAAC;YACH,QAAQ,GAAG;gBACP,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE;oBACF,KAAK,EAAE;wBACH,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;qBACrD;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9C,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAvFD,sCAuFC"}
@@ -1,56 +0,0 @@
1
- /**
2
- * ObjectQL
3
- * Copyright (c) 2026-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- /**
9
- * Hook definition
10
- */
11
- export interface Hook {
12
- pattern: string;
13
- handler: (context: any) => Promise<void> | void;
14
- packageName?: string;
15
- priority?: number;
16
- }
17
- /**
18
- * Compiled Hook Manager
19
- *
20
- * Improvement: Pre-compiles hook pipelines by event pattern at registration time.
21
- * No runtime pattern matching required.
22
- *
23
- * Expected: 5x faster hook execution, parallel async support
24
- */
25
- export declare class CompiledHookManager {
26
- private pipelines;
27
- private allHooks;
28
- private logger;
29
- /**
30
- * Expand a pattern like "before*" to all matching events
31
- */
32
- private expandPattern;
33
- /**
34
- * Register a hook - pre-groups by event pattern
35
- */
36
- registerHook(event: string, objectName: string, handler: any, packageName?: string): void;
37
- /**
38
- * Run hooks for an event - direct lookup, no pattern matching
39
- */
40
- runHooks(event: string, objectName: string, context: any): Promise<void>;
41
- /**
42
- * Remove all hooks from a package
43
- */
44
- removePackage(packageName: string): void;
45
- /**
46
- * Clear all hooks
47
- */
48
- clear(): void;
49
- /**
50
- * Get statistics about registered hooks
51
- */
52
- getStats(): {
53
- totalHooks: number;
54
- totalPipelines: number;
55
- };
56
- }
@@ -1,170 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.CompiledHookManager = void 0;
11
- const types_1 = require("@objectql/types");
12
- /**
13
- * Compiled Hook Manager
14
- *
15
- * Improvement: Pre-compiles hook pipelines by event pattern at registration time.
16
- * No runtime pattern matching required.
17
- *
18
- * Expected: 5x faster hook execution, parallel async support
19
- */
20
- class CompiledHookManager {
21
- constructor() {
22
- // Direct event -> hooks mapping (no pattern matching at runtime)
23
- this.pipelines = new Map();
24
- // Keep track of all registered hooks for management
25
- this.allHooks = new Map();
26
- // Structured logger
27
- this.logger = new types_1.ConsoleLogger({ name: '@objectql/hook-manager', level: 'warn' });
28
- }
29
- /**
30
- * Expand a pattern like "before*" to all matching events
31
- */
32
- expandPattern(pattern) {
33
- // Common event patterns
34
- const eventTypes = [
35
- 'beforeCreate', 'afterCreate',
36
- 'beforeUpdate', 'afterUpdate',
37
- 'beforeDelete', 'afterDelete',
38
- 'beforeFind', 'afterFind',
39
- 'beforeCount', 'afterCount'
40
- ];
41
- // Handle wildcards
42
- if (pattern === '*') {
43
- return eventTypes;
44
- }
45
- if (pattern.includes('*')) {
46
- // Use global replace to handle all occurrences of *
47
- const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
48
- return eventTypes.filter(event => regex.test(event));
49
- }
50
- // Exact match
51
- return [pattern];
52
- }
53
- /**
54
- * Register a hook - pre-groups by event pattern
55
- */
56
- registerHook(event, objectName, handler, packageName) {
57
- const hook = {
58
- pattern: `${event}:${objectName}`,
59
- handler,
60
- packageName,
61
- priority: 0
62
- };
63
- // Store in all hooks registry
64
- const hookId = `${event}:${objectName}:${Date.now()}`;
65
- this.allHooks.set(hookId, hook);
66
- // Expand event patterns
67
- const events = this.expandPattern(event);
68
- // Handle wildcard object names
69
- if (objectName === '*') {
70
- for (const concreteEvent of events) {
71
- // Register for all potential object names
72
- // Since we don't know all object names upfront, we keep a special '*' pipeline
73
- const wildcardKey = `${concreteEvent}:*`;
74
- if (!this.pipelines.has(wildcardKey)) {
75
- this.pipelines.set(wildcardKey, []);
76
- }
77
- this.pipelines.get(wildcardKey).push(hook);
78
- }
79
- }
80
- else {
81
- // Pre-group hooks by concrete event names (only for non-wildcard objects)
82
- for (const concreteEvent of events) {
83
- const key = `${concreteEvent}:${objectName}`;
84
- if (!this.pipelines.has(key)) {
85
- this.pipelines.set(key, []);
86
- }
87
- this.pipelines.get(key).push(hook);
88
- }
89
- }
90
- }
91
- /**
92
- * Run hooks for an event - direct lookup, no pattern matching
93
- */
94
- async runHooks(event, objectName, context) {
95
- const key = `${event}:${objectName}`;
96
- const wildcardKey = `${event}:*`;
97
- // Collect all applicable hooks
98
- const hooks = [];
99
- // Add object-specific hooks
100
- const objectHooks = this.pipelines.get(key);
101
- if (objectHooks) {
102
- hooks.push(...objectHooks);
103
- }
104
- // Add wildcard hooks
105
- const wildcardHooks = this.pipelines.get(wildcardKey);
106
- if (wildcardHooks) {
107
- hooks.push(...wildcardHooks);
108
- }
109
- if (hooks.length === 0) {
110
- return;
111
- }
112
- // Sort by priority (higher priority first)
113
- hooks.sort((a, b) => (b.priority || 0) - (a.priority || 0));
114
- // Execute hooks in parallel for better performance
115
- // Note: If order matters, change to sequential execution
116
- await Promise.all(hooks.map(hook => {
117
- try {
118
- return Promise.resolve(hook.handler(context));
119
- }
120
- catch (error) {
121
- this.logger.error(`Hook execution failed for ${event}:${objectName}`, error, {
122
- event,
123
- objectName,
124
- });
125
- return Promise.resolve();
126
- }
127
- }));
128
- }
129
- /**
130
- * Remove all hooks from a package
131
- */
132
- removePackage(packageName) {
133
- // Remove from all hooks registry
134
- const hooksToRemove = [];
135
- for (const [hookId, hook] of this.allHooks.entries()) {
136
- if (hook.packageName === packageName) {
137
- hooksToRemove.push(hookId);
138
- }
139
- }
140
- hooksToRemove.forEach(id => this.allHooks.delete(id));
141
- // Remove from pipelines
142
- for (const [key, hooks] of this.pipelines.entries()) {
143
- const filtered = hooks.filter(h => h.packageName !== packageName);
144
- if (filtered.length === 0) {
145
- this.pipelines.delete(key);
146
- }
147
- else {
148
- this.pipelines.set(key, filtered);
149
- }
150
- }
151
- }
152
- /**
153
- * Clear all hooks
154
- */
155
- clear() {
156
- this.pipelines.clear();
157
- this.allHooks.clear();
158
- }
159
- /**
160
- * Get statistics about registered hooks
161
- */
162
- getStats() {
163
- return {
164
- totalHooks: this.allHooks.size,
165
- totalPipelines: this.pipelines.size
166
- };
167
- }
168
- }
169
- exports.CompiledHookManager = CompiledHookManager;
170
- //# sourceMappingURL=CompiledHookManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompiledHookManager.js","sourceRoot":"","sources":["../../src/optimizations/CompiledHookManager.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- /**
2
- * ObjectQL
3
- * Copyright (c) 2026-present ObjectStack Inc.
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- /**
9
- * Dependency type
10
- */
11
- export type DependencyType = 'lookup' | 'master_detail' | 'foreign_key';
12
- /**
13
- * Edge in the dependency graph
14
- */
15
- export interface DependencyEdge {
16
- from: string;
17
- to: string;
18
- type: DependencyType;
19
- fieldName: string;
20
- }
21
- /**
22
- * Smart Dependency Graph
23
- *
24
- * Improvement: DAG-based dependency resolution for cascading operations.
25
- * Automatically handles cascade deletes and updates in correct order.
26
- *
27
- * Expected: Eliminates manual cascade logic, prevents orphaned data
28
- */
29
- export declare class DependencyGraph {
30
- private graph;
31
- private edges;
32
- /**
33
- * Add an object to the graph
34
- */
35
- addObject(objectName: string): void;
36
- /**
37
- * Add a dependency edge
38
- * from -> to means "to depends on from"
39
- */
40
- addDependency(from: string, to: string, type: DependencyType, fieldName: string): void;
41
- /**
42
- * Get all objects that depend on the given object
43
- */
44
- getDependents(objectName: string): string[];
45
- /**
46
- * Topological sort using DFS
47
- */
48
- topologicalSort(objects: string[]): string[];
49
- /**
50
- * Check for circular dependencies
51
- */
52
- hasCircularDependency(): boolean;
53
- /**
54
- * Get cascade delete order for an object
55
- * Returns objects in the order they should be deleted
56
- */
57
- getCascadeDeleteOrder(objectName: string): string[];
58
- /**
59
- * Automatically cascade delete based on dependency graph
60
- *
61
- * @param objectName The object type being deleted
62
- * @param id The ID of the record being deleted
63
- * @param deleteFunc Function to delete a record: (objectName, id) => Promise<void>
64
- */
65
- cascadeDelete(objectName: string, id: string, deleteFunc: (objName: string, recordId: string) => Promise<void>): Promise<void>;
66
- /**
67
- * Get graph statistics
68
- */
69
- getStats(): {
70
- totalObjects: number;
71
- totalDependencies: number;
72
- hasCircularDependency: boolean;
73
- };
74
- /**
75
- * Clear the graph
76
- */
77
- clear(): void;
78
- /**
79
- * Export graph as DOT format for visualization
80
- */
81
- toDot(): string;
82
- }
@@ -1,211 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.DependencyGraph = void 0;
11
- /**
12
- * Smart Dependency Graph
13
- *
14
- * Improvement: DAG-based dependency resolution for cascading operations.
15
- * Automatically handles cascade deletes and updates in correct order.
16
- *
17
- * Expected: Eliminates manual cascade logic, prevents orphaned data
18
- */
19
- class DependencyGraph {
20
- constructor() {
21
- // Adjacency list: object -> list of dependent objects
22
- this.graph = new Map();
23
- // Store edge metadata
24
- this.edges = new Map();
25
- }
26
- /**
27
- * Add an object to the graph
28
- */
29
- addObject(objectName) {
30
- if (!this.graph.has(objectName)) {
31
- this.graph.set(objectName, new Set());
32
- }
33
- if (!this.edges.has(objectName)) {
34
- this.edges.set(objectName, []);
35
- }
36
- }
37
- /**
38
- * Add a dependency edge
39
- * from -> to means "to depends on from"
40
- */
41
- addDependency(from, to, type, fieldName) {
42
- this.addObject(from);
43
- this.addObject(to);
44
- // Add edge
45
- this.graph.get(from).add(to);
46
- // Store edge metadata
47
- const edge = { from, to, type, fieldName };
48
- const fromEdges = this.edges.get(from) || [];
49
- fromEdges.push(edge);
50
- this.edges.set(from, fromEdges);
51
- }
52
- /**
53
- * Get all objects that depend on the given object
54
- */
55
- getDependents(objectName) {
56
- return Array.from(this.graph.get(objectName) || []);
57
- }
58
- /**
59
- * Topological sort using DFS
60
- */
61
- topologicalSort(objects) {
62
- const visited = new Set();
63
- const stack = [];
64
- const dfs = (node) => {
65
- if (visited.has(node))
66
- return;
67
- visited.add(node);
68
- const dependents = this.graph.get(node);
69
- if (dependents) {
70
- for (const dependent of dependents) {
71
- if (objects.includes(dependent)) {
72
- dfs(dependent);
73
- }
74
- }
75
- }
76
- stack.push(node);
77
- };
78
- for (const obj of objects) {
79
- dfs(obj);
80
- }
81
- return stack;
82
- }
83
- /**
84
- * Check for circular dependencies
85
- */
86
- hasCircularDependency() {
87
- const visited = new Set();
88
- const recursionStack = new Set();
89
- const hasCycle = (node) => {
90
- visited.add(node);
91
- recursionStack.add(node);
92
- const dependents = this.graph.get(node);
93
- if (dependents) {
94
- for (const dependent of dependents) {
95
- if (!visited.has(dependent)) {
96
- if (hasCycle(dependent)) {
97
- return true;
98
- }
99
- }
100
- else if (recursionStack.has(dependent)) {
101
- return true;
102
- }
103
- }
104
- }
105
- recursionStack.delete(node);
106
- return false;
107
- };
108
- for (const node of this.graph.keys()) {
109
- if (!visited.has(node)) {
110
- if (hasCycle(node)) {
111
- return true;
112
- }
113
- }
114
- }
115
- return false;
116
- }
117
- /**
118
- * Get cascade delete order for an object
119
- * Returns objects in the order they should be deleted
120
- */
121
- getCascadeDeleteOrder(objectName) {
122
- const dependents = this.getDependents(objectName);
123
- if (dependents.length === 0) {
124
- return [objectName];
125
- }
126
- // Recursively get all transitive dependents
127
- const allDependents = new Set();
128
- const collectDependents = (obj) => {
129
- const deps = this.getDependents(obj);
130
- for (const dep of deps) {
131
- if (!allDependents.has(dep)) {
132
- allDependents.add(dep);
133
- collectDependents(dep);
134
- }
135
- }
136
- };
137
- collectDependents(objectName);
138
- // Add the original object
139
- allDependents.add(objectName);
140
- // Sort topologically to get correct deletion order
141
- const sorted = this.topologicalSort(Array.from(allDependents));
142
- return sorted;
143
- }
144
- /**
145
- * Automatically cascade delete based on dependency graph
146
- *
147
- * @param objectName The object type being deleted
148
- * @param id The ID of the record being deleted
149
- * @param deleteFunc Function to delete a record: (objectName, id) => Promise<void>
150
- */
151
- async cascadeDelete(objectName, id, deleteFunc) {
152
- const deleteOrder = this.getCascadeDeleteOrder(objectName);
153
- // Delete in correct order based on DAG
154
- for (const objToDelete of deleteOrder) {
155
- if (objToDelete === objectName) {
156
- // Delete the main record
157
- await deleteFunc(objectName, id);
158
- }
159
- else {
160
- // Find and delete dependent records
161
- // This is a simplified version - in production, you'd need to:
162
- // 1. Query for records that reference the deleted record
163
- // 2. Delete them based on cascade rules (CASCADE vs SET NULL vs RESTRICT)
164
- const edgesFromParent = this.edges.get(objectName) || [];
165
- for (const edge of edgesFromParent) {
166
- if (edge.to === objToDelete && edge.type === 'master_detail') {
167
- // For master-detail, cascade delete dependent records
168
- // await deleteFunc(objToDelete, <dependent_id>);
169
- // Implementation would require querying for dependent records
170
- }
171
- }
172
- }
173
- }
174
- }
175
- /**
176
- * Get graph statistics
177
- */
178
- getStats() {
179
- let totalDeps = 0;
180
- for (const deps of this.graph.values()) {
181
- totalDeps += deps.size;
182
- }
183
- return {
184
- totalObjects: this.graph.size,
185
- totalDependencies: totalDeps,
186
- hasCircularDependency: this.hasCircularDependency()
187
- };
188
- }
189
- /**
190
- * Clear the graph
191
- */
192
- clear() {
193
- this.graph.clear();
194
- this.edges.clear();
195
- }
196
- /**
197
- * Export graph as DOT format for visualization
198
- */
199
- toDot() {
200
- let dot = 'digraph Dependencies {\n';
201
- for (const [from, dependents] of this.graph.entries()) {
202
- for (const to of dependents) {
203
- dot += ` "${from}" -> "${to}";\n`;
204
- }
205
- }
206
- dot += '}';
207
- return dot;
208
- }
209
- }
210
- exports.DependencyGraph = DependencyGraph;
211
- //# sourceMappingURL=DependencyGraph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DependencyGraph.js","sourceRoot":"","sources":["../../src/optimizations/DependencyGraph.ts"],"names":[],"mappings":"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"}