@objectql/core 4.1.0 → 4.2.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 (107) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +42 -0
  3. package/dist/app.d.ts +61 -51
  4. package/dist/app.js +101 -431
  5. package/dist/app.js.map +1 -1
  6. package/dist/index.d.ts +4 -11
  7. package/dist/index.js +13 -9
  8. package/dist/index.js.map +1 -1
  9. package/dist/kernel-factory.d.ts +38 -0
  10. package/dist/kernel-factory.js +38 -0
  11. package/dist/kernel-factory.js.map +1 -0
  12. package/dist/plugin.d.ts +10 -16
  13. package/dist/plugin.js +104 -58
  14. package/dist/plugin.js.map +1 -1
  15. package/dist/repository.d.ts +4 -31
  16. package/dist/repository.js +7 -275
  17. package/dist/repository.js.map +1 -1
  18. package/dist/util.js +4 -2
  19. package/dist/util.js.map +1 -1
  20. package/package.json +19 -11
  21. package/src/app.ts +157 -531
  22. package/src/index.ts +8 -23
  23. package/src/kernel-factory.ts +47 -0
  24. package/src/plugin.ts +116 -94
  25. package/src/repository.ts +4 -313
  26. package/src/util.ts +5 -3
  27. package/test/__mocks__/@objectstack/core.ts +250 -1
  28. package/test/__mocks__/@objectstack/objectql.ts +127 -0
  29. package/test/__mocks__/@objectstack/runtime.ts +14 -5
  30. package/test/introspection.test.ts +1 -1
  31. package/test/mock-driver.ts +5 -5
  32. package/test/optimizations.test.ts +2 -2
  33. package/test/plugin-integration.test.ts +4 -5
  34. package/test/utils.ts +6 -6
  35. package/tsconfig.json +3 -1
  36. package/tsconfig.tsbuildinfo +1 -1
  37. package/dist/gateway.d.ts +0 -36
  38. package/dist/gateway.js +0 -89
  39. package/dist/gateway.js.map +0 -1
  40. package/dist/optimizations/CompiledHookManager.d.ts +0 -55
  41. package/dist/optimizations/CompiledHookManager.js +0 -164
  42. package/dist/optimizations/CompiledHookManager.js.map +0 -1
  43. package/dist/optimizations/DependencyGraph.d.ts +0 -82
  44. package/dist/optimizations/DependencyGraph.js +0 -211
  45. package/dist/optimizations/DependencyGraph.js.map +0 -1
  46. package/dist/optimizations/GlobalConnectionPool.d.ts +0 -89
  47. package/dist/optimizations/GlobalConnectionPool.js +0 -193
  48. package/dist/optimizations/GlobalConnectionPool.js.map +0 -1
  49. package/dist/optimizations/LazyMetadataLoader.d.ts +0 -75
  50. package/dist/optimizations/LazyMetadataLoader.js +0 -149
  51. package/dist/optimizations/LazyMetadataLoader.js.map +0 -1
  52. package/dist/optimizations/OptimizedMetadataRegistry.d.ts +0 -26
  53. package/dist/optimizations/OptimizedMetadataRegistry.js +0 -117
  54. package/dist/optimizations/OptimizedMetadataRegistry.js.map +0 -1
  55. package/dist/optimizations/OptimizedValidationEngine.d.ts +0 -73
  56. package/dist/optimizations/OptimizedValidationEngine.js +0 -141
  57. package/dist/optimizations/OptimizedValidationEngine.js.map +0 -1
  58. package/dist/optimizations/QueryCompiler.d.ts +0 -51
  59. package/dist/optimizations/QueryCompiler.js +0 -216
  60. package/dist/optimizations/QueryCompiler.js.map +0 -1
  61. package/dist/optimizations/SQLQueryOptimizer.d.ts +0 -96
  62. package/dist/optimizations/SQLQueryOptimizer.js +0 -265
  63. package/dist/optimizations/SQLQueryOptimizer.js.map +0 -1
  64. package/dist/optimizations/index.d.ts +0 -32
  65. package/dist/optimizations/index.js +0 -44
  66. package/dist/optimizations/index.js.map +0 -1
  67. package/dist/protocol.d.ts +0 -180
  68. package/dist/protocol.js +0 -260
  69. package/dist/protocol.js.map +0 -1
  70. package/dist/query/filter-translator.d.ts +0 -27
  71. package/dist/query/filter-translator.js +0 -38
  72. package/dist/query/filter-translator.js.map +0 -1
  73. package/dist/query/index.d.ts +0 -22
  74. package/dist/query/index.js +0 -39
  75. package/dist/query/index.js.map +0 -1
  76. package/dist/query/query-analyzer.d.ts +0 -188
  77. package/dist/query/query-analyzer.js +0 -348
  78. package/dist/query/query-analyzer.js.map +0 -1
  79. package/dist/query/query-builder.d.ts +0 -35
  80. package/dist/query/query-builder.js +0 -61
  81. package/dist/query/query-builder.js.map +0 -1
  82. package/dist/query/query-service.d.ts +0 -153
  83. package/dist/query/query-service.js +0 -272
  84. package/dist/query/query-service.js.map +0 -1
  85. package/jest.config.js +0 -29
  86. package/src/gateway.ts +0 -101
  87. package/src/optimizations/CompiledHookManager.ts +0 -185
  88. package/src/optimizations/DependencyGraph.ts +0 -255
  89. package/src/optimizations/GlobalConnectionPool.ts +0 -251
  90. package/src/optimizations/LazyMetadataLoader.ts +0 -180
  91. package/src/optimizations/OptimizedMetadataRegistry.ts +0 -132
  92. package/src/optimizations/OptimizedValidationEngine.ts +0 -172
  93. package/src/optimizations/QueryCompiler.ts +0 -242
  94. package/src/optimizations/SQLQueryOptimizer.ts +0 -329
  95. package/src/optimizations/index.ts +0 -34
  96. package/src/protocol.ts +0 -291
  97. package/src/query/filter-translator.ts +0 -41
  98. package/src/query/index.ts +0 -24
  99. package/src/query/query-analyzer.ts +0 -533
  100. package/src/query/query-builder.ts +0 -64
  101. package/src/query/query-service.ts +0 -398
  102. package/test/app.test.ts +0 -578
  103. package/test/filter-syntax.test.ts +0 -233
  104. package/test/gateway.test.ts +0 -88
  105. package/test/protocol.test.ts +0 -143
  106. package/test/repository-validation.test.ts +0 -351
  107. package/test/repository.test.ts +0 -151
@@ -1,73 +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
- * Compiled validator function type
10
- */
11
- export type ValidatorFunction = (data: any) => boolean | {
12
- valid: boolean;
13
- errors?: string[];
14
- };
15
- /**
16
- * Validation schema interface
17
- */
18
- export interface ValidationSchema {
19
- type: string;
20
- required?: boolean;
21
- properties?: Record<string, ValidationSchema>;
22
- items?: ValidationSchema;
23
- enum?: any[];
24
- minimum?: number;
25
- maximum?: number;
26
- minLength?: number;
27
- maxLength?: number;
28
- pattern?: string;
29
- }
30
- /**
31
- * Optimized Validation Engine
32
- *
33
- * Improvement: Compiles validation rules to optimized validators.
34
- * Validators are compiled once and cached for reuse.
35
- *
36
- * Expected: 3x faster validation, lower memory churn
37
- */
38
- export declare class OptimizedValidationEngine {
39
- private validators;
40
- /**
41
- * Compile a validation schema to an optimized validator function
42
- */
43
- private compileSchema;
44
- /**
45
- * Compile and cache a validator for an object
46
- */
47
- compile(objectName: string, schema: ValidationSchema): void;
48
- /**
49
- * Validate data against a compiled validator
50
- */
51
- validate(objectName: string, data: any): {
52
- valid: boolean;
53
- errors?: string[];
54
- };
55
- /**
56
- * Check if a validator exists for an object
57
- */
58
- hasValidator(objectName: string): boolean;
59
- /**
60
- * Remove a compiled validator
61
- */
62
- removeValidator(objectName: string): void;
63
- /**
64
- * Clear all compiled validators
65
- */
66
- clearAll(): void;
67
- /**
68
- * Get statistics about compiled validators
69
- */
70
- getStats(): {
71
- totalValidators: number;
72
- };
73
- }
@@ -1,141 +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.OptimizedValidationEngine = void 0;
11
- /**
12
- * Optimized Validation Engine
13
- *
14
- * Improvement: Compiles validation rules to optimized validators.
15
- * Validators are compiled once and cached for reuse.
16
- *
17
- * Expected: 3x faster validation, lower memory churn
18
- */
19
- class OptimizedValidationEngine {
20
- constructor() {
21
- this.validators = new Map();
22
- }
23
- /**
24
- * Compile a validation schema to an optimized validator function
25
- */
26
- compileSchema(schema) {
27
- // Generate optimized validation function
28
- return (data) => {
29
- const errors = [];
30
- // Type validation
31
- if (schema.type) {
32
- const actualType = Array.isArray(data) ? 'array' : typeof data;
33
- if (actualType !== schema.type && !(schema.type === 'integer' && typeof data === 'number')) {
34
- errors.push(`Expected type ${schema.type}, got ${actualType}`);
35
- }
36
- }
37
- // Required validation
38
- if (schema.required && (data === null || data === undefined)) {
39
- errors.push('Value is required');
40
- }
41
- // String validations
42
- if (typeof data === 'string') {
43
- if (schema.minLength !== undefined && data.length < schema.minLength) {
44
- errors.push(`String length must be at least ${schema.minLength}`);
45
- }
46
- if (schema.maxLength !== undefined && data.length > schema.maxLength) {
47
- errors.push(`String length must not exceed ${schema.maxLength}`);
48
- }
49
- if (schema.pattern) {
50
- const regex = new RegExp(schema.pattern);
51
- if (!regex.test(data)) {
52
- errors.push(`String does not match pattern ${schema.pattern}`);
53
- }
54
- }
55
- }
56
- // Number validations
57
- if (typeof data === 'number') {
58
- if (schema.minimum !== undefined && data < schema.minimum) {
59
- errors.push(`Value must be at least ${schema.minimum}`);
60
- }
61
- if (schema.maximum !== undefined && data > schema.maximum) {
62
- errors.push(`Value must not exceed ${schema.maximum}`);
63
- }
64
- }
65
- // Enum validation
66
- if (schema.enum && !schema.enum.includes(data)) {
67
- errors.push(`Value must be one of: ${schema.enum.join(', ')}`);
68
- }
69
- // Object property validation
70
- if (schema.properties && typeof data === 'object' && data !== null) {
71
- for (const [key, propSchema] of Object.entries(schema.properties)) {
72
- const propValidator = this.compileSchema(propSchema);
73
- const result = propValidator(data[key]);
74
- if (typeof result === 'object' && !result.valid) {
75
- errors.push(...(result.errors || []).map(e => `${key}: ${e}`));
76
- }
77
- }
78
- }
79
- // Array item validation
80
- if (schema.items && Array.isArray(data)) {
81
- const itemValidator = this.compileSchema(schema.items);
82
- data.forEach((item, index) => {
83
- const result = itemValidator(item);
84
- if (typeof result === 'object' && !result.valid) {
85
- errors.push(...(result.errors || []).map(e => `[${index}]: ${e}`));
86
- }
87
- });
88
- }
89
- return {
90
- valid: errors.length === 0,
91
- errors: errors.length > 0 ? errors : undefined
92
- };
93
- };
94
- }
95
- /**
96
- * Compile and cache a validator for an object
97
- */
98
- compile(objectName, schema) {
99
- const validator = this.compileSchema(schema);
100
- this.validators.set(objectName, validator);
101
- }
102
- /**
103
- * Validate data against a compiled validator
104
- */
105
- validate(objectName, data) {
106
- const validator = this.validators.get(objectName);
107
- if (!validator) {
108
- throw new Error(`No validator compiled for object: ${objectName}`);
109
- }
110
- const result = validator(data);
111
- return typeof result === 'boolean' ? { valid: result } : result;
112
- }
113
- /**
114
- * Check if a validator exists for an object
115
- */
116
- hasValidator(objectName) {
117
- return this.validators.has(objectName);
118
- }
119
- /**
120
- * Remove a compiled validator
121
- */
122
- removeValidator(objectName) {
123
- this.validators.delete(objectName);
124
- }
125
- /**
126
- * Clear all compiled validators
127
- */
128
- clearAll() {
129
- this.validators.clear();
130
- }
131
- /**
132
- * Get statistics about compiled validators
133
- */
134
- getStats() {
135
- return {
136
- totalValidators: this.validators.size
137
- };
138
- }
139
- }
140
- exports.OptimizedValidationEngine = OptimizedValidationEngine;
141
- //# sourceMappingURL=OptimizedValidationEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OptimizedValidationEngine.js","sourceRoot":"","sources":["../../src/optimizations/OptimizedValidationEngine.ts"],"names":[],"mappings":"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"}
@@ -1,51 +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
- * Compiled Query representation
10
- * Contains optimized execution plan
11
- */
12
- export interface CompiledQuery {
13
- objectName: string;
14
- ast: any;
15
- plan: any;
16
- timestamp: number;
17
- }
18
- /**
19
- * Query Compiler with LRU Cache
20
- *
21
- * Improvement: Compiles Query AST to optimized execution plan and caches results.
22
- * Expected: 10x faster query planning, 50% lower CPU usage
23
- */
24
- export declare class QueryCompiler {
25
- private cache;
26
- constructor(cacheSize?: number);
27
- /**
28
- * Hash a Query AST to create a cache key
29
- */
30
- private hashAST;
31
- /**
32
- * Compile AST to optimized execution plan
33
- */
34
- private compileAST;
35
- /**
36
- * Detect fields that can use indexes
37
- */
38
- private detectIndexableFields;
39
- /**
40
- * Determine optimal join strategy
41
- */
42
- private determineJoinStrategy;
43
- /**
44
- * Compile and cache query
45
- */
46
- compile(objectName: string, ast: any): CompiledQuery;
47
- /**
48
- * Clear the cache (useful for testing or after schema changes)
49
- */
50
- clearCache(): void;
51
- }
@@ -1,216 +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.QueryCompiler = void 0;
11
- /**
12
- * LRU Cache implementation
13
- * Simple doubly-linked list + hash map for O(1) operations
14
- */
15
- class LRUCache {
16
- constructor(capacity) {
17
- this.cache = new Map();
18
- this.head = null;
19
- this.tail = null;
20
- this.capacity = capacity;
21
- }
22
- get(key) {
23
- const node = this.cache.get(key);
24
- if (!node)
25
- return undefined;
26
- // Move to front (most recently used)
27
- this.moveToFront(key);
28
- return node.value;
29
- }
30
- set(key, value) {
31
- if (this.cache.has(key)) {
32
- // Update existing
33
- const node = this.cache.get(key);
34
- node.value = value;
35
- this.moveToFront(key);
36
- }
37
- else {
38
- // Add new
39
- if (this.cache.size >= this.capacity) {
40
- // Evict least recently used (tail)
41
- if (this.tail !== null) {
42
- const oldTail = this.tail;
43
- const tailNode = this.cache.get(this.tail);
44
- if (tailNode && tailNode.prev !== null) {
45
- const prevNode = this.cache.get(tailNode.prev);
46
- if (prevNode) {
47
- prevNode.next = null;
48
- this.tail = tailNode.prev;
49
- }
50
- }
51
- else {
52
- this.head = null;
53
- this.tail = null;
54
- }
55
- this.cache.delete(oldTail);
56
- }
57
- }
58
- // Insert at head
59
- this.cache.set(key, { value, prev: null, next: this.head });
60
- if (this.head !== null) {
61
- const headNode = this.cache.get(this.head);
62
- if (headNode) {
63
- headNode.prev = key;
64
- }
65
- }
66
- this.head = key;
67
- if (this.tail === null) {
68
- this.tail = key;
69
- }
70
- }
71
- }
72
- has(key) {
73
- return this.cache.has(key);
74
- }
75
- moveToFront(key) {
76
- if (key === this.head)
77
- return; // Already at front
78
- const node = this.cache.get(key);
79
- if (!node)
80
- return;
81
- // Remove from current position
82
- if (node.prev !== null) {
83
- const prevNode = this.cache.get(node.prev);
84
- if (prevNode) {
85
- prevNode.next = node.next;
86
- }
87
- }
88
- if (node.next !== null) {
89
- const nextNode = this.cache.get(node.next);
90
- if (nextNode) {
91
- nextNode.prev = node.prev;
92
- }
93
- }
94
- if (key === this.tail) {
95
- this.tail = node.prev;
96
- }
97
- // Move to front
98
- node.prev = null;
99
- node.next = this.head;
100
- if (this.head !== null) {
101
- const headNode = this.cache.get(this.head);
102
- if (headNode) {
103
- headNode.prev = key;
104
- }
105
- }
106
- this.head = key;
107
- }
108
- }
109
- /**
110
- * Query Compiler with LRU Cache
111
- *
112
- * Improvement: Compiles Query AST to optimized execution plan and caches results.
113
- * Expected: 10x faster query planning, 50% lower CPU usage
114
- */
115
- class QueryCompiler {
116
- constructor(cacheSize = 1000) {
117
- this.cache = new LRUCache(cacheSize);
118
- }
119
- /**
120
- * Hash a Query AST to create a cache key
121
- */
122
- hashAST(ast) {
123
- // Simple JSON-based hash for now
124
- // In production, consider a faster hash function
125
- try {
126
- return JSON.stringify(ast);
127
- }
128
- catch (e) {
129
- // Fallback for circular references
130
- return String(Date.now() + Math.random());
131
- }
132
- }
133
- /**
134
- * Compile AST to optimized execution plan
135
- */
136
- compileAST(objectName, ast) {
137
- // Optimization opportunities:
138
- // 1. Precompute field projections
139
- // 2. Optimize filter conditions
140
- // 3. Determine optimal join strategy
141
- // 4. Index hint detection
142
- const plan = {
143
- objectName,
144
- // Extract and optimize components
145
- fields: ast.fields || ['*'],
146
- filters: ast.filters || ast.where,
147
- sort: ast.sort || ast.orderBy,
148
- limit: ast.limit || ast.top,
149
- offset: ast.offset || ast.skip,
150
- // Add optimization hints
151
- useIndex: this.detectIndexableFields(ast),
152
- joinStrategy: this.determineJoinStrategy(ast)
153
- };
154
- return {
155
- objectName,
156
- ast,
157
- plan,
158
- timestamp: Date.now()
159
- };
160
- }
161
- /**
162
- * Detect fields that can use indexes
163
- */
164
- detectIndexableFields(ast) {
165
- const indexable = [];
166
- if (ast.filters) {
167
- // Extract fields from filter conditions
168
- const extractFields = (filters) => {
169
- if (Array.isArray(filters)) {
170
- filters.forEach(extractFields);
171
- }
172
- else if (filters && typeof filters === 'object') {
173
- Object.keys(filters).forEach(key => {
174
- if (!key.startsWith('$')) {
175
- indexable.push(key);
176
- }
177
- });
178
- }
179
- };
180
- extractFields(ast.filters);
181
- }
182
- return [...new Set(indexable)]; // Remove duplicates
183
- }
184
- /**
185
- * Determine optimal join strategy
186
- */
187
- determineJoinStrategy(ast) {
188
- // Simple heuristic: use hash join for large datasets
189
- if (ast.limit && ast.limit < 100) {
190
- return 'nested';
191
- }
192
- return 'hash';
193
- }
194
- /**
195
- * Compile and cache query
196
- */
197
- compile(objectName, ast) {
198
- const key = this.hashAST(ast);
199
- if (this.cache.has(key)) {
200
- // Cache hit ✅
201
- return this.cache.get(key);
202
- }
203
- // Cache miss - compile and store
204
- const compiled = this.compileAST(objectName, ast);
205
- this.cache.set(key, compiled);
206
- return compiled;
207
- }
208
- /**
209
- * Clear the cache (useful for testing or after schema changes)
210
- */
211
- clearCache() {
212
- this.cache = new LRUCache(1000);
213
- }
214
- }
215
- exports.QueryCompiler = QueryCompiler;
216
- //# sourceMappingURL=QueryCompiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryCompiler.js","sourceRoot":"","sources":["../../src/optimizations/QueryCompiler.ts"],"names":[],"mappings":"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"}
@@ -1,96 +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
- * Index metadata
10
- */
11
- export interface IndexMetadata {
12
- name: string;
13
- fields: string[];
14
- unique: boolean;
15
- type?: 'btree' | 'hash' | 'fulltext';
16
- }
17
- /**
18
- * Schema with index information
19
- */
20
- export interface SchemaWithIndexes {
21
- name: string;
22
- fields: Record<string, any>;
23
- indexes?: IndexMetadata[];
24
- }
25
- /**
26
- * Query AST for optimization
27
- */
28
- export interface OptimizableQueryAST {
29
- object: string;
30
- fields?: string[];
31
- filters?: any;
32
- sort?: Array<{
33
- field: string;
34
- order: 'asc' | 'desc';
35
- }>;
36
- joins?: Array<{
37
- type: 'left' | 'inner';
38
- table: string;
39
- on: any;
40
- }>;
41
- limit?: number;
42
- offset?: number;
43
- }
44
- /**
45
- * SQL Query Optimizer
46
- *
47
- * Improvement: SQL-aware optimization with index hints and join reordering.
48
- * Analyzes query patterns and schema to generate optimal SQL.
49
- *
50
- * Expected: 2-5x faster queries on large datasets
51
- */
52
- export declare class SQLQueryOptimizer {
53
- private schemas;
54
- /**
55
- * Register a schema with index information
56
- */
57
- registerSchema(schema: SchemaWithIndexes): void;
58
- /**
59
- * Check if a field has an index
60
- */
61
- private hasIndex;
62
- /**
63
- * Get the best index for given filter fields
64
- */
65
- private getBestIndex;
66
- /**
67
- * Extract filter fields from filter conditions
68
- */
69
- private extractFilterFields;
70
- /**
71
- * Optimize join type based on query characteristics
72
- *
73
- * Note: This method expects filter fields in one of two formats:
74
- * 1. Table-prefixed: "tableName.fieldName" (e.g., "accounts.type")
75
- * 2. Simple field name: "fieldName" (checked against joined table schema)
76
- *
77
- * Multi-level qualification (e.g., "schema.table.field") is not currently supported.
78
- */
79
- private optimizeJoinType;
80
- /**
81
- * Optimize a query AST to SQL
82
- */
83
- optimize(ast: OptimizableQueryAST): string;
84
- /**
85
- * Convert filter object to SQL WHERE clause
86
- */
87
- private filtersToSQL;
88
- /**
89
- * Fallback: generate basic SQL without optimizations
90
- */
91
- private generateBasicSQL;
92
- /**
93
- * Clear all registered schemas
94
- */
95
- clearSchemas(): void;
96
- }