Skip to content

Commit 0426668

Browse files
committed
fix: implement broker shim for routing HttpDispatcher actions to kernel services in startMockServer
1 parent f0c19cd commit 0426668

1 file changed

Lines changed: 56 additions & 2 deletions

File tree

apps/console/src/mocks/browser.ts

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,68 @@ export async function startMockServer() {
4242
await kernel.use(new AppPlugin(appConfig));
4343

4444
// MSW Plugin handles worker setup automatically with enableBrowser: true
45-
await kernel.use(new MSWPlugin({
45+
const mswPlugin = new MSWPlugin({
4646
enableBrowser: true,
4747
baseUrl: '/api/v1',
4848
logRequests: true
49-
}));
49+
});
50+
await kernel.use(mswPlugin);
5051

5152
await kernel.bootstrap();
5253

54+
// Broker shim: routes HttpDispatcher action calls to kernel services.
55+
// Required because no current plugin initializes kernel.broker.
56+
const ql = kernel.getService<any>('objectql');
57+
const protocol = kernel.getService<any>('protocol');
58+
(kernel as any).broker = {
59+
call: async (action: string, params: any) => {
60+
const [service, method] = action.split('.');
61+
62+
if (service === 'data') {
63+
if (method === 'query' || method === 'find') {
64+
const filter = params.filters?.filters ?? params.filters ?? params.filter;
65+
const data = await ql.find(params.object, {
66+
filter,
67+
top: params.filters?.top ?? params.top,
68+
skip: params.filters?.skip ?? params.skip,
69+
sort: params.filters?.sort ?? params.sort,
70+
});
71+
return { data, count: data.length };
72+
}
73+
if (method === 'get') {
74+
return ql.findOne(params.object, { filter: { id: params.id } });
75+
}
76+
if (method === 'create') {
77+
const res = await ql.insert(params.object, params.data);
78+
return { ...params.data, ...res };
79+
}
80+
if (method === 'update') {
81+
return ql.update(params.object, params.data, { filter: { id: params.id } });
82+
}
83+
if (method === 'delete') {
84+
return ql.delete(params.object, { filter: { id: params.id } });
85+
}
86+
}
87+
88+
if (service === 'metadata') {
89+
if (method === 'getObject') return protocol.getMetaItem('object', params.objectName);
90+
if (method === 'objects') return protocol.getMetaItems('object');
91+
if (method === 'types') return { types: ['object', 'app'] };
92+
}
93+
94+
if (service === 'ui') {
95+
if (method === 'getView') return protocol.getUiView(params.object, params.type);
96+
}
97+
98+
if (service === 'auth') {
99+
return { token: 'mock-token', user: { name: 'Admin' } };
100+
}
101+
102+
if (import.meta.env.DEV) console.warn(`[Broker] Unhandled: ${action}`, params);
103+
return null;
104+
}
105+
};
106+
53107
if (import.meta.env.DEV) console.log('[MSW] ObjectStack Runtime ready');
54108
return kernel;
55109
}

0 commit comments

Comments
 (0)