Skip to content

Commit d26e088

Browse files
Copilothotlong
andcommitted
fix: resolve TypeScript errors in examples/features
- Add @objectstack/runtime dependency to examples/features package.json - Export RouteEntry type from runtime package - Fix pluginSource property access in registry-example.ts - Add type annotations to middleware parameter in middleware-example.ts - Add enabled field to all middleware registrations - Fix MockProtocolProvider type casting in rest-server-example.ts - Add missing config fields (objectParamStyle, cacheTtl, defaultAtomic) - Add type annotation to newUser variable - Add RouteEntry type to route parameter Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 8a43c94 commit d26e088

6 files changed

Lines changed: 78 additions & 9 deletions

File tree

examples/features/middleware-example.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ function applyMiddlewareToServer(server: any, manager: MiddlewareManager) {
147147
const chain = manager.getMiddlewareChain();
148148

149149
// Apply each middleware to the server
150-
chain.forEach(middleware => {
150+
chain.forEach((middleware: Middleware) => {
151151
server.use(middleware);
152152
});
153153

@@ -263,19 +263,22 @@ function setupAdvancedMiddleware() {
263263
manager.register({
264264
name: 'cors',
265265
type: 'custom',
266+
enabled: true,
266267
order: 10,
267268
}, corsMiddleware);
268269

269270
manager.register({
270271
name: 'logger',
271272
type: 'logging',
273+
enabled: true,
272274
order: 20,
273275
}, loggingMiddleware);
274276

275277
// Rate limiting (100 requests per minute)
276278
manager.register({
277279
name: 'rate_limit',
278280
type: 'custom',
281+
enabled: true,
279282
order: 25,
280283
config: {
281284
windowMs: 60000,
@@ -290,6 +293,7 @@ function setupAdvancedMiddleware() {
290293
manager.register({
291294
name: 'auth',
292295
type: 'authentication',
296+
enabled: true,
293297
order: 30,
294298
paths: {
295299
exclude: ['/health', '/metrics', '/api/v1']
@@ -300,6 +304,7 @@ function setupAdvancedMiddleware() {
300304
manager.register({
301305
name: 'cache',
302306
type: 'custom',
307+
enabled: true,
303308
order: 35,
304309
paths: {
305310
include: ['/api/v1/meta/*'] // Only cache metadata
@@ -309,6 +314,7 @@ function setupAdvancedMiddleware() {
309314
manager.register({
310315
name: 'validation',
311316
type: 'validation',
317+
enabled: true,
312318
order: 40,
313319
}, validationMiddleware);
314320

examples/features/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
},
1111
"dependencies": {
1212
"@objectstack/spec": "workspace:*",
13-
"@objectstack/core": "workspace:*"
13+
"@objectstack/core": "workspace:*",
14+
"@objectstack/runtime": "workspace:*"
1415
},
1516
"devDependencies": {
1617
"typescript": "^5.0.0",

examples/features/registry-example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ console.log('Found', restApis.length, 'REST APIs');
287287

288288
// Discover plugin-registered APIs
289289
const pluginApis = registry.apis.filter(
290-
api => api.metadata?.pluginSource !== undefined
290+
api => api.metadata && 'pluginSource' in api.metadata && api.metadata.pluginSource !== undefined
291291
);
292292
console.log('Found', pluginApis.length, 'plugin APIs');
293293

examples/features/rest-server-example.ts

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
* generate RESTful CRUD endpoints for your ObjectStack application.
66
*/
77

8-
import { RestServer } from '@objectstack/runtime';
9-
import type { IProtocolProvider } from '@objectstack/runtime';
8+
import { RestServer, RouteEntry } from '@objectstack/runtime';
9+
import type { ObjectStackProtocol } from '@objectstack/spec/api';
1010

1111
/**
1212
* Example: Mock Protocol Provider
1313
*
1414
* In a real application, this would be provided by your ObjectQL engine
1515
* or data layer implementation.
1616
*/
17-
class MockProtocolProvider implements IProtocolProvider {
17+
class MockProtocolProvider {
1818
private data: Map<string, any[]> = new Map();
1919

2020
getDiscovery() {
@@ -105,13 +105,68 @@ class MockProtocolProvider implements IProtocolProvider {
105105
return { success: true };
106106
}
107107

108+
async getMetaItemCached(req: any) {
109+
return {
110+
type: req.type,
111+
name: req.name,
112+
item: await this.getMetaItem(req.type, req.name),
113+
cached: false
114+
};
115+
}
116+
117+
async batchData(req: any) {
118+
const results = [];
119+
for (const op of req.operations || []) {
120+
try {
121+
let result;
122+
if (op.operation === 'create') {
123+
result = await this.createData(op.object, op.data);
124+
} else if (op.operation === 'update') {
125+
result = await this.updateData(op.object, op.id, op.data);
126+
} else if (op.operation === 'delete') {
127+
result = await this.deleteData(op.object, op.id);
128+
}
129+
results.push({ success: true, data: result });
130+
} catch (error) {
131+
results.push({ success: false, error: (error as Error).message });
132+
}
133+
}
134+
return { results };
135+
}
136+
108137
async createManyData(object: string, records: any[]) {
109138
const existing = this.data.get(object) || [];
110139
const newRecords = records.map(r => ({ id: Date.now().toString(), ...r }));
111140
existing.push(...newRecords);
112141
this.data.set(object, existing);
113142
return newRecords;
114143
}
144+
145+
async updateManyData(req: any) {
146+
const results = [];
147+
for (const id of req.ids || []) {
148+
try {
149+
const result = await this.updateData(req.object, id, req.data);
150+
results.push({ success: true, data: result });
151+
} catch (error) {
152+
results.push({ success: false, error: (error as Error).message });
153+
}
154+
}
155+
return { results };
156+
}
157+
158+
async deleteManyData(req: any) {
159+
const results = [];
160+
for (const id of req.ids || []) {
161+
try {
162+
const result = await this.deleteData(req.object, id);
163+
results.push({ success: true, data: result });
164+
} catch (error) {
165+
results.push({ success: false, error: (error as Error).message });
166+
}
167+
}
168+
return { results };
169+
}
115170
}
116171

117172
/**
@@ -123,7 +178,7 @@ async function setupRestServer() {
123178
const httpServer = {} as any; // Placeholder - use actual server in production
124179

125180
// 2. Create a protocol provider
126-
const protocol = new MockProtocolProvider();
181+
const protocol = new MockProtocolProvider() as any as ObjectStackProtocol;
127182

128183
// 3. Create REST server with configuration
129184
const restServer = new RestServer(httpServer, protocol, {
@@ -137,6 +192,7 @@ async function setupRestServer() {
137192
},
138193
crud: {
139194
dataPrefix: '/data',
195+
objectParamStyle: 'path' as const,
140196
operations: {
141197
create: true,
142198
read: true,
@@ -148,10 +204,12 @@ async function setupRestServer() {
148204
metadata: {
149205
prefix: '/meta',
150206
enableCache: true,
207+
cacheTtl: 300, // 5 minutes
151208
},
152209
batch: {
153210
maxBatchSize: 200,
154211
enableBatchEndpoint: true,
212+
defaultAtomic: true,
155213
operations: {
156214
createMany: true,
157215
updateMany: true,
@@ -167,7 +225,7 @@ async function setupRestServer() {
167225
// 5. Get route information (useful for debugging)
168226
const routes = restServer.getRoutes();
169227
console.log(`Registered ${routes.length} routes:`);
170-
routes.forEach(route => {
228+
routes.forEach((route: RouteEntry) => {
171229
console.log(` ${route.method} ${route.path}`);
172230
});
173231

@@ -214,7 +272,7 @@ async function exampleApiUsage() {
214272
email: 'john@example.com'
215273
})
216274
});
217-
const newUser = await createResponse.json();
275+
const newUser = await createResponse.json() as { id: string; name: string; email: string };
218276
console.log('Created user:', newUser);
219277

220278
// List users

packages/runtime/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export { AppPlugin } from './app-plugin.js';
99
export { HttpServer } from './http-server.js';
1010
export { RestServer } from './rest-server.js';
1111
export { RouteManager, RouteGroupBuilder } from './route-manager.js';
12+
export type { RouteEntry } from './route-manager.js';
1213
export { MiddlewareManager } from './middleware.js';
1314

1415
// Export Types

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)