Skip to content

Commit e315756

Browse files
authored
refactor: use Disposable from podman desktop api (#421)
Signed-off-by: Philippe Martin <[email protected]>
1 parent 03d4383 commit e315756

File tree

12 files changed

+38
-75
lines changed

12 files changed

+38
-75
lines changed

__mocks__/@podman-desktop/api.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ const plugin = {
8080
kubernetes: {
8181
onDidUpdateKubeconfig: vi.fn(),
8282
getKubeconfig: vi.fn(),
83-
}
83+
},
84+
Disposable: {
85+
create: (func) => ({ dispose: func }),
86+
},
8487
};
8588

8689
module.exports = plugin;

packages/channels/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
* SPDX-License-Identifier: Apache-2.0
1717
***********************************************************************/
1818

19-
import { IDisposable, Disposable } from './types/disposable';
19+
import { IDisposable } from './types/disposable';
2020

21-
export { IDisposable, Disposable };
21+
export { IDisposable };
2222
export * from './interface';
2323
export * from './model';
2424
export * from './channels';

packages/channels/src/types/disposable.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,3 @@ export const IDisposable = Symbol.for('IDisposable');
2020
export interface IDisposable {
2121
dispose(): void;
2222
}
23-
24-
export class Disposable implements IDisposable {
25-
private disposable: undefined | (() => void);
26-
27-
static from(...disposables: { dispose(): unknown }[]): Disposable {
28-
return new Disposable(() => {
29-
if (disposables) {
30-
for (const disposable of disposables) {
31-
if (disposable && typeof disposable.dispose === 'function') {
32-
disposable.dispose();
33-
}
34-
}
35-
}
36-
});
37-
}
38-
39-
constructor(func: () => void) {
40-
this.disposable = func;
41-
}
42-
/**
43-
* Dispose this object.
44-
*/
45-
dispose(): void {
46-
if (this.disposable) {
47-
this.disposable();
48-
this.disposable = undefined;
49-
}
50-
}
51-
52-
static create(func: () => void): Disposable {
53-
return new Disposable(func);
54-
}
55-
56-
static noop(): Disposable {
57-
return Disposable.from();
58-
}
59-
}

packages/extension/src/manager/contexts-manager.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import type { Cluster, CoreV1Event, KubernetesObject, ObjectCache, V1Status } from '@kubernetes/client-node';
2020
import { ApiException, KubeConfig } from '@kubernetes/client-node';
21-
import type { Uri } from '@podman-desktop/api';
21+
import { type Uri, Disposable } from '@podman-desktop/api';
2222
import { afterEach, assert, beforeEach, describe, expect, test, vi } from 'vitest';
2323
import { kubernetes, window } from '@podman-desktop/api';
2424

@@ -35,7 +35,6 @@ import type { ResourceFactory } from '/@/resources/resource-factory.js';
3535
import { ResourceFactoryBase } from '/@/resources/resource-factory.js';
3636
import type { CacheUpdatedEvent, ObjectDeletedEvent, ResourceInformer } from '/@/types/resource-informer.js';
3737
import { vol } from 'memfs';
38-
import { Disposable } from '@kubernetes-dashboard/channels';
3938

4039
const resource4DeleteObjectMock = vi.fn();
4140
const resource4SearchBySelectorMock = vi.fn();

packages/extension/src/manager/kubernetes-providers.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818

1919
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
2020
import { KubernetesProvidersManager } from '/@/manager/kubernetes-providers';
21-
import type { ConnectionFactory, ConnectionFactoryDetails } from '@podman-desktop/api';
21+
import { type ConnectionFactory, type ConnectionFactoryDetails, Disposable } from '@podman-desktop/api';
2222
import { provider } from '@podman-desktop/api';
23-
import { Disposable } from '@kubernetes-dashboard/channels';
2423

2524
let manager: KubernetesProvidersManager;
2625
let onDidSetDisposable: Disposable;

packages/extension/src/port-forward/port-forward-connection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import net from 'node:net';
1919

2020
import type { KubeConfig, V1Deployment, V1Pod, V1Service } from '@kubernetes/client-node';
2121
import { PortForward } from '@kubernetes/client-node';
22+
import { Disposable } from '@podman-desktop/api';
2223
import {
2324
type ForwardConfig,
2425
type PortForwardableResource,
2526
type PortMapping,
2627
WorkloadKind,
2728
type IDisposable,
28-
Disposable,
2929
} from '@kubernetes-dashboard/channels';
3030
import type { ForwardConfigRequirements } from './port-forward-validation';
3131
import type { ContextsManager } from '/@/manager/contexts-manager';

packages/extension/src/port-forward/port-forward-service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { PortForwardConnectionService } from './port-forward-connection';
2121
import { ForwardConfigRequirements } from './port-forward-validation';
2222
import { ConfigManagementService, MemoryBasedStorage } from './port-forward-storage';
2323
import {
24-
Disposable,
2524
type IDisposable,
2625
type ForwardConfig,
2726
type ForwardOptions,
@@ -31,7 +30,7 @@ import { ContextsManager } from '/@/manager/contexts-manager';
3130
import { inject, injectable } from 'inversify';
3231
import { Emitter, Event } from '/@/types/emitter';
3332
import { SystemApiImpl } from '/@/manager/system-api';
34-
import { window } from '@podman-desktop/api';
33+
import { Disposable, window } from '@podman-desktop/api';
3534

3635
/**
3736
* Service provider for Kubernetes port forwarding.

packages/webview/src/component/pods/PodTerminal.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
API_POD_TERMINALS,
2424
type PodTerminalsApi,
2525
type PodTerminalChunk,
26-
Disposable,
26+
type IDisposable,
2727
} from '@kubernetes-dashboard/channels';
2828
import { StreamsMocks } from '/@/tests/stream-mocks';
2929
import { Terminal } from '@xterm/xterm';
@@ -63,7 +63,7 @@ const terminalMock = {
6363
beforeEach(() => {
6464
vi.resetAllMocks();
6565
vi.mocked(Terminal).mockReturnValue(terminalMock);
66-
vi.mocked(terminalMock.onData).mockReturnValue(Disposable.create(() => {}));
66+
vi.mocked(terminalMock.onData).mockReturnValue({ dispose: () => {} } as IDisposable);
6767
streamMocks.reset();
6868
streamMocks.mock<PodTerminalChunk>('streamPodTerminals', streamPodTerminalsMock);
6969

packages/webview/src/component/pods/PodTerminal.svelte

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { getTerminalTheme } from '/@/component/terminal/terminal-theme';
88
import { FitAddon } from '@xterm/addon-fit';
99
import { SerializeAddon } from '@xterm/addon-serialize';
1010
import { Remote } from '/@/remote/remote';
11-
import { API_POD_TERMINALS, Disposable } from '@kubernetes-dashboard/channels';
11+
import { API_POD_TERMINALS } from '@kubernetes-dashboard/channels';
1212
1313
interface Props {
1414
object: V1Pod;
@@ -47,7 +47,7 @@ async function initializeNewTerminal(
4747
containerName: string,
4848
): Promise<IDisposable> {
4949
if (!container) {
50-
return Disposable.create(() => {});
50+
return { dispose: () => {} } as IDisposable;
5151
}
5252
shellTerminal = new Terminal({
5353
fontSize: 10,
@@ -86,14 +86,16 @@ async function initializeNewTerminal(
8686
window.addEventListener('resize', onResize);
8787
await resize();
8888
89-
return Disposable.create(() => {
90-
const terminalContent = serializeAddon.serialize();
91-
podTerminalsApi.saveState(podName, namespace, containerName, terminalContent).catch(console.error);
92-
window.removeEventListener('resize', onResize);
93-
shellTerminal.dispose();
94-
fitAddon.dispose();
95-
serializeAddon.dispose();
96-
});
89+
return {
90+
dispose: () => {
91+
const terminalContent = serializeAddon.serialize();
92+
podTerminalsApi.saveState(podName, namespace, containerName, terminalContent).catch(console.error);
93+
window.removeEventListener('resize', onResize);
94+
shellTerminal.dispose();
95+
fitAddon.dispose();
96+
serializeAddon.dispose();
97+
},
98+
} as IDisposable;
9799
}
98100
99101
onDestroy(() => {

packages/webview/src/stream/pod-logs.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import {
2323
POD_LOGS,
2424
type PodLogsApi,
2525
type PodLogsChunk,
26-
Disposable,
2726
type IDisposable,
2827
} from '@kubernetes-dashboard/channels';
2928
import { RpcBrowser } from '@kubernetes-dashboard/rpc';
@@ -51,9 +50,11 @@ export class StreamPodLogs implements StreamObject<PodLogsChunk> {
5150
callback(chunk);
5251
});
5352
await this.#podLogsApi.streamPodLogs(podName, namespace, containerName);
54-
return Disposable.create(() => {
55-
disposable.dispose();
56-
this.#podLogsApi.stopStreamPodLogs(podName, namespace, containerName).catch(console.error);
57-
});
53+
return {
54+
dispose: () => {
55+
disposable.dispose();
56+
this.#podLogsApi.stopStreamPodLogs(podName, namespace, containerName).catch(console.error);
57+
},
58+
} as IDisposable;
5859
}
5960
}

0 commit comments

Comments
 (0)