Skip to content

Commit 83ab04a

Browse files
committed
refactor: typing improvements
Signed-off-by: Pedro Lamas <[email protected]>
1 parent e4db081 commit 83ab04a

File tree

8 files changed

+79
-59
lines changed

8 files changed

+79
-59
lines changed

src/mixins/files.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AppFile, FileUpload, AppFileThumbnail, KlipperFileMeta, FileDownload } from '@/store/files/types'
1+
import type { AppFile, FileUpload, AppFileThumbnail, MoonrakerFileMeta, FileDownload } from '@/store/files/types'
22
import Vue from 'vue'
33
import { Component } from 'vue-property-decorator'
44
import type { AxiosRequestConfig, AxiosProgressEvent } from 'axios'
@@ -20,13 +20,13 @@ export default class FilesMixin extends Vue {
2020
return currentUser?.username === '_TRUSTED_USER_'
2121
}
2222

23-
getThumbUrl (meta: KlipperFileMeta, root: string, path: string, large: boolean, date?: number) {
23+
getThumbUrl (meta: MoonrakerFileMeta, root: string, path: string, large: boolean, date?: number) {
2424
const thumb = this.getThumb(meta, root, path, large, date)
2525

2626
return thumb?.url ?? ''
2727
}
2828

29-
getThumb (meta: KlipperFileMeta, root: string, path: string, large = true, date?: number): AppFileThumbnail | undefined {
29+
getThumb (meta: MoonrakerFileMeta, root: string, path: string, large = true, date?: number): AppFileThumbnail | undefined {
3030
if (meta.thumbnails?.length) {
3131
const thumb = meta.thumbnails.reduce((a, b) => (a.size > b.size) === large ? a : b)
3232

src/plugins/socketClient.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ interface SocketPluginOptions {
282282
}
283283

284284
export interface NotifyOptions {
285-
params?: any;
285+
params?: Record<string, any>;
286286
dispatch?: string;
287287
commit?: string;
288288
wait?: string;
@@ -292,15 +292,19 @@ interface Request {
292292
id: number;
293293
dispatch?: string;
294294
commit?: string;
295-
params?: any;
295+
params?: Record<string, any>;
296296
wait?: string;
297297
}
298298

299+
export type ObjectWithRequest<T> = T & {
300+
__request__: Request
301+
}
302+
299303
interface SocketRequest {
300304
jsonrpc: string;
301305
id: number;
302306
method: string;
303-
params?: any;
307+
params?: Record<string, any>;
304308
}
305309

306310
interface SocketResponse {

src/store/files/actions.ts

+22-21
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import type { ActionTree } from 'vuex'
2-
import type { FilesState, KlipperFile, KlipperDir, FileChangeSocketResponse, KlipperFileWithMeta, DiskUsage, FileChangeItem, FilePaths } from './types'
2+
import type { FilesState, MoonrakerFile, MoonrakerDir, FileChange, MoonrakerFileWithMeta, FileChangeItem, FilePaths, DirectoryInformation } from './types'
33
import type { RootState } from '../types'
44
import getFilePaths from '@/util/get-file-paths'
55
import { SocketActions } from '@/api/socketActions'
66
import { Globals } from '@/globals'
7+
import type { ObjectWithRequest } from '@/plugins/socketClient'
78

8-
const itemAsKlipperFile = (item: FileChangeItem, paths: FilePaths): KlipperFile => ({
9+
const itemAsMoonrakerFile = (item: FileChangeItem, paths: FilePaths): MoonrakerFile => ({
910
filename: paths.filename,
1011
modified: item.modified,
1112
size: item.size,
1213
permissions: item.permissions
1314
})
1415

15-
const itemAsKlipperDir = (item: FileChangeItem, paths: FilePaths): KlipperDir => ({
16+
const itemAsMoonrakerDir = (item: FileChangeItem, paths: FilePaths): MoonrakerDir => ({
1617
dirname: paths.filename,
1718
modified: item.modified,
1819
size: item.size,
@@ -27,9 +28,9 @@ export const actions: ActionTree<FilesState, RootState> = {
2728
commit('setReset')
2829
},
2930

30-
async onServerFilesGetDirectory ({ commit }, payload: { disk_usage: DiskUsage; files: (KlipperFile | KlipperFileWithMeta)[]; dirs: KlipperDir[]; __request__: any }) {
31-
const { disk_usage, files, dirs, __request__: request } = payload
32-
const { path } = request.params
31+
async onServerFilesGetDirectory ({ commit }, payload: ObjectWithRequest<DirectoryInformation>) {
32+
const { disk_usage, files, dirs } = payload
33+
const { path } = payload.__request__.params ?? {}
3334

3435
const filteredDirs = dirs
3536
.filter(file =>
@@ -42,16 +43,16 @@ export const actions: ActionTree<FilesState, RootState> = {
4243
commit('setServerFilesGetDirectory', { path, content: { files, dirs: filteredDirs } })
4344
},
4445

45-
async onServerFilesListRoot ({ commit }, payload) {
46-
const { root } = payload.__request__.params
46+
async onServerFilesListRoot ({ commit }, payload: ObjectWithRequest<[]>) {
47+
const { root } = payload.__request__.params ?? {}
4748

4849
commit('setServerFilesListRoot', { root, files: [...payload] })
4950
},
5051

5152
/**
5253
* If we request the metadata (a file..) then we load and update here.
5354
*/
54-
async onFileMetaData ({ commit }, payload: KlipperFileWithMeta) {
55+
async onFileMetaData ({ commit }, payload: MoonrakerFileWithMeta) {
5556
const paths = getFilePaths(payload.filename, 'gcodes')
5657

5758
if (!paths.filtered) {
@@ -69,17 +70,17 @@ export const actions: ActionTree<FilesState, RootState> = {
6970
async notifyUploadFile ({ dispatch }, payload) { dispatch('notifyCreateFile', payload) },
7071

7172
// New notifications
72-
async notifyRootUpdate ({ commit }, payload: FileChangeSocketResponse) {
73+
async notifyRootUpdate ({ commit }, payload: FileChange) {
7374
const root = payload.item.root
7475

7576
commit('setResetRoot', root)
7677

7778
SocketActions.serverFilesGetDirectory(root)
7879
},
7980

80-
async notifyModifyFile ({ dispatch }, payload: FileChangeSocketResponse) { dispatch('notifyCreateFile', payload) },
81+
async notifyModifyFile ({ dispatch }, payload: FileChange) { dispatch('notifyCreateFile', payload) },
8182

82-
async notifyCreateFile ({ commit, dispatch, rootState }, payload: FileChangeSocketResponse) {
83+
async notifyCreateFile ({ commit, dispatch, rootState }, payload: FileChange) {
8384
const paths = getFilePaths(payload.item.path, payload.item.root)
8485

8586
if (!paths.filtered) {
@@ -101,30 +102,30 @@ export const actions: ActionTree<FilesState, RootState> = {
101102
// For gcode files, get the metadata and the meta update will take care of the rest.
102103
SocketActions.serverFilesMetadata(paths.pathFilename)
103104
} else {
104-
const file = itemAsKlipperFile(payload.item, paths)
105+
const file = itemAsMoonrakerFile(payload.item, paths)
105106

106107
commit('setFileUpdate', { paths, file })
107108
}
108109
}
109110
},
110111

111-
async notifyCreateDir ({ commit }, payload: FileChangeSocketResponse) {
112+
async notifyCreateDir ({ commit }, payload: FileChange) {
112113
const paths = getFilePaths(payload.item.path, payload.item.root)
113114

114115
if (!paths.filtered) {
115-
const dir = itemAsKlipperDir(payload.item, paths)
116+
const dir = itemAsMoonrakerDir(payload.item, paths)
116117

117118
commit('setDirUpdate', { paths, dir })
118119
}
119120
},
120121

121-
async notifyMoveFile ({ commit }, payload: FileChangeSocketResponse) {
122+
async notifyMoveFile ({ commit }, payload: FileChange) {
122123
const { item, source_item } = payload
123124

124125
const paths = getFilePaths(item.path, item.root)
125126

126127
if (!paths.filtered) {
127-
const file = itemAsKlipperFile(payload.item, paths)
128+
const file = itemAsMoonrakerFile(payload.item, paths)
128129

129130
commit('setFileUpdate', { paths, file })
130131
}
@@ -138,13 +139,13 @@ export const actions: ActionTree<FilesState, RootState> = {
138139
}
139140
},
140141

141-
async notifyMoveDir ({ commit }, payload: FileChangeSocketResponse) {
142+
async notifyMoveDir ({ commit }, payload: FileChange) {
142143
const { item, source_item } = payload
143144

144145
const paths = getFilePaths(item.path, item.root)
145146

146147
if (!paths.filtered) {
147-
const dir = itemAsKlipperDir(payload.item, paths)
148+
const dir = itemAsMoonrakerDir(payload.item, paths)
148149

149150
commit('setDirUpdate', { paths, dir })
150151
}
@@ -160,15 +161,15 @@ export const actions: ActionTree<FilesState, RootState> = {
160161
}
161162
},
162163

163-
async notifyDeleteFile ({ commit }, payload: FileChangeSocketResponse) {
164+
async notifyDeleteFile ({ commit }, payload: FileChange) {
164165
const paths = getFilePaths(payload.item.path, payload.item.root)
165166

166167
if (!paths.filtered) {
167168
commit('setFileDelete', paths)
168169
}
169170
},
170171

171-
async notifyDeleteDir ({ commit }, payload: FileChangeSocketResponse) {
172+
async notifyDeleteDir ({ commit }, payload: FileChange) {
172173
const paths = getFilePaths(payload.item.path, payload.item.root)
173174

174175
if (!paths.filtered) {

src/store/files/mutations.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Vue from 'vue'
22
import type { MutationTree } from 'vuex'
3-
import type { FilesState, MoonrakerRootFile, MoonrakerPathContent, KlipperFile, KlipperFileWithMeta, FilePaths, KlipperDir } from './types'
3+
import type { FilesState, MoonrakerRootFile, MoonrakerPathContent, MoonrakerFile, MoonrakerFileWithMeta, FilePaths, MoonrakerDir } from './types'
44
import { defaultState } from './state'
55
import { Globals } from '@/globals'
66

@@ -37,7 +37,7 @@ export const mutations: MutationTree<FilesState> = {
3737
Vue.set(state.rootFiles, root, files)
3838
},
3939

40-
setFileUpdate (state, payload: { paths: FilePaths, file: KlipperFile | KlipperFileWithMeta }) {
40+
setFileUpdate (state, payload: { paths: FilePaths, file: MoonrakerFile | MoonrakerFileWithMeta }) {
4141
const { paths, file } = payload
4242

4343
const isFiltered = (
@@ -61,7 +61,7 @@ export const mutations: MutationTree<FilesState> = {
6161
}
6262
},
6363

64-
setDirUpdate (state, payload: { paths: FilePaths, dir: KlipperDir }) {
64+
setDirUpdate (state, payload: { paths: FilePaths, dir: MoonrakerDir }) {
6565
const { paths, dir } = payload
6666

6767
const isFiltered = (

src/store/files/types.metadata.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export interface KlipperFileMeta {
1+
export interface MoonrakerFileMeta {
22
modified: number | string;
33
size: number;
44
uuid?: string;
@@ -19,10 +19,10 @@ export interface KlipperFileMeta {
1919
object_height?: number;
2020
slicer?: string;
2121
slicer_version?: string;
22-
thumbnails?: KlipperFileMetaThumbnail[];
22+
thumbnails?: MoonrakerFileMetaThumbnail[];
2323
}
2424

25-
export interface KlipperFileMetaThumbnail {
25+
export interface MoonrakerFileMetaThumbnail {
2626
relative_path: string;
2727
height: number;
2828
width: number;

src/store/files/types.ts

+36-22
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { KlipperFileMeta, KlipperFileMetaThumbnail } from './types.metadata'
1+
import type { MoonrakerFileMeta, MoonrakerFileMetaThumbnail } from './types.metadata'
22
import type { HistoryItem } from '@/store/history/types'
33

4-
export type { KlipperFileMeta, KlipperFileMetaThumbnail }
4+
export type { MoonrakerFileMeta, MoonrakerFileMetaThumbnail }
55

66
export interface FilesState {
77
uploads: FileUpload[];
@@ -18,54 +18,75 @@ export interface DiskUsage {
1818
free: number;
1919
}
2020

21+
export interface MoonrakerRootFile {
22+
path: string;
23+
modified: number;
24+
size: number;
25+
permissions: string;
26+
}
27+
2128
export interface MoonrakerPathContent {
22-
files: (KlipperFile | KlipperFileWithMeta) []
23-
dirs: KlipperDir[]
29+
files: (MoonrakerFile | MoonrakerFileWithMeta) []
30+
dirs: MoonrakerDir[]
2431
}
2532

26-
export interface KlipperFile {
33+
type MoonrakerFilePermissions = '' | 'r' | 'rw'
34+
35+
export interface MoonrakerFile {
2736
filename: string;
2837
modified: number | string;
2938
size: number;
30-
permissions?: '' | 'r' | 'rw';
39+
permissions?: MoonrakerFilePermissions;
3140
}
3241

33-
export interface KlipperFileWithMeta extends KlipperFile, KlipperFileMeta {
42+
export interface MoonrakerFileWithMeta extends MoonrakerFile, MoonrakerFileMeta {
3443
print_start_time?: number | null;
3544
job_id?: string | null;
3645
}
3746

38-
export interface KlipperDir {
47+
export interface MoonrakerDir {
3948
dirname: string;
4049
modified: number | string;
4150
size: number;
42-
permissions?: '' | 'r' | 'rw';
51+
permissions?: MoonrakerFilePermissions;
4352
}
4453

45-
export interface AppFile extends KlipperFile {
54+
export interface AppFile extends MoonrakerFile {
4655
type: 'file';
4756
name: string;
4857
extension: string;
4958
path: string;
5059
modified: number;
5160
}
5261

53-
export interface AppFileWithMeta extends AppFile, KlipperFileWithMeta {
62+
export interface AppFileWithMeta extends AppFile, MoonrakerFileWithMeta {
5463
modified: number;
5564
history?: HistoryItem;
5665
}
5766

58-
export interface AppFileThumbnail extends KlipperFileMetaThumbnail {
67+
export interface AppFileThumbnail extends MoonrakerFileMetaThumbnail {
5968
url: string;
6069
}
6170

62-
export interface AppDirectory extends KlipperDir {
71+
export interface AppDirectory extends MoonrakerDir {
6372
type: 'directory';
6473
name: string;
6574
modified: number;
6675
}
6776

68-
export interface FileChangeSocketResponse {
77+
export interface DirectoryInformation {
78+
dirs: MoonrakerDir[];
79+
files: (MoonrakerFile | MoonrakerFileWithMeta)[];
80+
disk_usage: DiskUsage;
81+
root_info: RootInfo;
82+
}
83+
84+
export interface RootInfo {
85+
name: string;
86+
permissions?: MoonrakerFilePermissions;
87+
}
88+
89+
export interface FileChange {
6990
action: 'create_file' | 'create_dir' | 'delete_file' | 'delete_dir' | 'move_file' | 'move_dir' | 'modify_file' | 'root_update';
7091
item: FileChangeItem;
7192
source_item?: {
@@ -79,7 +100,7 @@ export interface FileChangeItem {
79100
path: string;
80101
modified: number;
81102
size: number;
82-
permissions?: '' | 'r' | 'rw';
103+
permissions?: MoonrakerFilePermissions;
83104
}
84105

85106
export interface FilePaths {
@@ -119,10 +140,3 @@ export interface RootProperties {
119140
canConfigure: boolean;
120141
filterTypes: FileFilterType[]
121142
}
122-
123-
export interface MoonrakerRootFile {
124-
path: string;
125-
modified: number;
126-
size: number;
127-
permissions: string;
128-
}

src/store/history/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { KlipperFileMeta } from '@/store/files/types.metadata'
1+
import type { MoonrakerFileMeta } from '@/store/files/types.metadata'
22

33
export interface HistoryState {
44
count: number;
@@ -12,7 +12,7 @@ export interface HistoryItem {
1212
end_time: string | null;
1313
filament_used: number;
1414
filename: string;
15-
metadata?: KlipperFileMeta;
15+
metadata?: MoonrakerFileMeta;
1616
print_duration: number;
1717
status: HistoryItemStatus;
1818
start_time: number;

src/store/server/actions.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type { AppPushNotification } from '../notifications/types'
88
import { EventBus } from '@/eventBus'
99
import i18n from '@/plugins/i18n'
1010
import { gte, valid } from 'semver'
11+
import type { ObjectWithRequest } from '@/plugins/socketClient'
1112

1213
let retryTimeout: number
1314

@@ -171,8 +172,8 @@ export const actions: ActionTree<ServerState, RootState> = {
171172
commit('setMachinePeripherals', payload)
172173
},
173174

174-
async onMachinePeripheralsCanbus ({ commit }, payload: { can_uuids: CanbusUuid[], __request__: any }) {
175-
const { interface: canbusInterface } = payload.__request__.params
175+
async onMachinePeripheralsCanbus ({ commit }, payload: ObjectWithRequest<{ can_uuids: CanbusUuid[] }>) {
176+
const { interface: canbusInterface } = payload.__request__.params ?? {}
176177

177178
commit('setMachinePeripheralsCanbus', { canbusInterface, can_uuids: payload.can_uuids })
178179
},

0 commit comments

Comments
 (0)