Skip to content

Commit ad84d06

Browse files
committed
fix(reactant-share): add destroy api
1 parent 6ae5372 commit ad84d06

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

packages/reactant-share/src/createApp.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,13 @@ export const createSharedApp = async <
311311
);
312312
}
313313
const { bootstrap } = app;
314-
// todo: app.destroy with transport destroy
315314
return {
316315
...app,
316+
destroy: () => {
317+
app.destroy();
318+
options.share.transports?.client?.dispose();
319+
options.share.transports?.server?.dispose();
320+
},
317321
bootstrap: async (...args: S) => {
318322
const result = bootstrap(...args);
319323
const portDetector = app.container.get(PortDetector);

packages/reactant-share/test/case.test.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,3 +808,89 @@ test('fork with args', async () => {
808808
expect(server.instance.count).toBe(3);
809809
expect(client0.instance.count).toBe(4);
810810
});
811+
812+
test('fork with args with destroy on Client', async () => {
813+
const transports = mockPairTransports();
814+
815+
const server = await createSharedApp({
816+
modules: [],
817+
main: Counter,
818+
render: () => {},
819+
share: {
820+
name: 'counter',
821+
type: 'Base',
822+
port: 'server',
823+
transports: {
824+
server: transports[0],
825+
},
826+
},
827+
});
828+
829+
expect(server.instance.count).toBe(0);
830+
831+
const client0 = await createSharedApp({
832+
modules: [],
833+
main: Counter,
834+
render: () => {},
835+
share: {
836+
name: 'counter',
837+
type: 'Base',
838+
port: 'client',
839+
transports: {
840+
client: transports[1],
841+
},
842+
},
843+
});
844+
await client0.bootstrap();
845+
expect(client0.instance.count).toBe(0);
846+
847+
client0.destroy();
848+
await server.instance.increase();
849+
850+
expect(server.instance.count).toBe(1);
851+
expect(client0.instance.count).toBe(0);
852+
});
853+
854+
test('fork with args with destroy on Server', async () => {
855+
const transports = mockPairTransports();
856+
857+
const server = await createSharedApp({
858+
modules: [],
859+
main: Counter,
860+
render: () => {},
861+
share: {
862+
name: 'counter',
863+
type: 'Base',
864+
port: 'server',
865+
transports: {
866+
server: transports[0],
867+
},
868+
},
869+
});
870+
871+
expect(server.instance.count).toBe(0);
872+
873+
const client0 = await createSharedApp({
874+
modules: [],
875+
main: Counter,
876+
render: () => {},
877+
share: {
878+
name: 'counter',
879+
type: 'Base',
880+
port: 'client',
881+
transports: {
882+
client: transports[1],
883+
},
884+
},
885+
});
886+
await client0.bootstrap();
887+
expect(client0.instance.count).toBe(0);
888+
889+
server.destroy();
890+
await server.instance.increase();
891+
// jest can send message to client after server destroyed
892+
expect(server.instance.count).toBe(1);
893+
expect(client0.instance.count).toBe(1);
894+
895+
await expect(client0.instance.increase()).rejects.toThrowError();
896+
});

0 commit comments

Comments
 (0)