Skip to content

Commit ac241fb

Browse files
committed
Refactor API and contract structure; move HTTP server and data engine interfaces to @objectstack/core, remove deprecated files
1 parent 84c7401 commit ac241fb

File tree

7 files changed

+56
-324
lines changed

7 files changed

+56
-324
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* IDataEngine - Standard Data Engine Interface
3+
*
4+
* Abstract interface for data persistence capabilities.
5+
* Following the Dependency Inversion Principle - plugins depend on this interface,
6+
* not on concrete database implementations.
7+
*/
8+
9+
export interface DataEngineFilter {
10+
[key: string]: any;
11+
}
12+
13+
export interface DataEngineQueryOptions {
14+
/** Filter conditions */
15+
filter?: DataEngineFilter;
16+
/** Fields to select */
17+
select?: string[];
18+
/** Sort order */
19+
sort?: Record<string, 1 | -1 | 'asc' | 'desc'>;
20+
/** Limit number of results */
21+
limit?: number;
22+
/** Skip number of results */
23+
skip?: number;
24+
/** Maximum number of results */
25+
top?: number;
26+
}
27+
28+
export interface IDataEngine {
29+
insert(objectName: string, data: any): Promise<any>;
30+
find(objectName: string, query?: DataEngineQueryOptions): Promise<any[]>;
31+
update(objectName: string, id: any, data: any): Promise<any>;
32+
delete(objectName: string, id: any): Promise<boolean>;
33+
}
34+
35+
// Driver Interface specific to storage drivers
36+
export interface DriverOptions {
37+
name?: string;
38+
url?: string;
39+
[key: string]: any;
40+
}
41+
42+
export interface DriverInterface extends IDataEngine {
43+
name: string;
44+
version: string;
45+
connect(): Promise<void>;
46+
disconnect(): Promise<void>;
47+
}
File renamed without changes.

packages/core/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
export * from './kernel.js';
22
export * from './types.js';
3+
export * from './contracts/http-server.js';
4+
export * from './contracts/data-engine.js';

packages/spec/src/api/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,5 @@ export * from './realtime.zod';
1414
export * from './router.zod';
1515
export * from './odata.zod';
1616

17-
export * from './http-server';
1817
export * from './protocol';
1918

packages/spec/src/system/data-engine.zod.ts

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -39,69 +39,19 @@ export const DataEngineQueryOptionsSchema = z.object({
3939
* Data Engine Interface Schema
4040
*
4141
* Defines the contract for data engine implementations.
42+
* (Deprecated: Moved to @objectstack/core/contracts/data-engine)
4243
*/
44+
/*
4345
export const DataEngineSchema = z.object({
44-
/**
45-
* Insert a new record
46-
*
47-
* @param objectName - Name of the object/table (e.g., 'user', 'order')
48-
* @param data - Data to insert
49-
* @returns Promise resolving to the created record (including generated ID)
50-
*/
51-
insert: z.function()
52-
.args(z.string(), z.any())
53-
.returns(z.promise(z.any()))
54-
.describe('Insert a new record'),
55-
56-
/**
57-
* Find records matching a query
58-
*
59-
* @param objectName - Name of the object/table
60-
* @param query - Query conditions (optional)
61-
* @returns Promise resolving to an array of matching records
62-
*/
63-
find: z.function()
64-
.args(z.string())
65-
.returns(z.promise(z.array(z.any())))
66-
.describe('Find records matching a query'),
67-
68-
/**
69-
* Update a record by ID
70-
*
71-
* @param objectName - Name of the object/table
72-
* @param id - Record ID
73-
* @param data - Updated data (partial update)
74-
* @returns Promise resolving to the updated record
75-
*/
76-
update: z.function()
77-
.args(z.string(), z.any(), z.any())
78-
.returns(z.promise(z.any()))
79-
.describe('Update a record by ID'),
80-
81-
/**
82-
* Delete a record by ID
83-
*
84-
* @param objectName - Name of the object/table
85-
* @param id - Record ID
86-
* @returns Promise resolving to true if deleted, false otherwise
87-
*/
88-
delete: z.function()
89-
.args(z.string(), z.any())
90-
.returns(z.promise(z.boolean()))
91-
.describe('Delete a record by ID'),
46+
...
9247
}).describe('Data Engine Interface');
48+
*/
9349

9450
/**
9551
* TypeScript types derived from schemas
9652
*/
9753
export type DataEngineFilter = z.infer<typeof DataEngineFilterSchema>;
9854
export type DataEngineQueryOptions = z.infer<typeof DataEngineQueryOptionsSchema>;
9955

100-
// Define the TypeScript interface manually for better type safety
101-
// Zod function schema doesn't handle optional parameters well
102-
export interface IDataEngine {
103-
insert(objectName: string, data: any): Promise<any>;
104-
find(objectName: string, query?: DataEngineQueryOptions): Promise<any[]>;
105-
update(objectName: string, id: any, data: any): Promise<any>;
106-
delete(objectName: string, id: any): Promise<boolean>;
107-
}
56+
// Moved IDataEngine interface to @objectstack/core to separate runtime contract from data schema
57+
// Moved IDataEngine interface to @objectstack/core to separate runtime contract from data schema

packages/spec/src/system/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export * from './types';
1616

1717
// Re-export Core System Definitions
1818
export * from './manifest.zod';
19-
export * from './plugin.zod';
19+
// export * from './plugin.zod'; // Moved to @objectstack/core
2020
export * from './logger.zod';
2121
export * from './context.zod';
2222
export * from './scoped-storage.zod';

0 commit comments

Comments
 (0)