Skip to content

Commit 5df3c00

Browse files
feat(ui): remove SerializableObject, use type-fest's JsonObject
1 parent b049880 commit 5df3c00

25 files changed

+61
-74
lines changed

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addAdHocPostProcessingRequestedListener.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { createAction } from '@reduxjs/toolkit';
22
import { logger } from 'app/logging/logger';
33
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
4-
import type { SerializableObject } from 'common/types';
54
import { buildAdHocPostProcessingGraph } from 'features/nodes/util/graph/buildAdHocPostProcessingGraph';
65
import { toast } from 'features/toast/toast';
76
import { t } from 'i18next';
87
import { queueApi } from 'services/api/endpoints/queue';
98
import type { BatchConfig, ImageDTO } from 'services/api/types';
9+
import type { JsonObject } from 'type-fest';
1010

1111
const log = logger('queue');
1212

@@ -39,9 +39,9 @@ export const addAdHocPostProcessingRequestedListener = (startAppListening: AppSt
3939

4040
const enqueueResult = await req.unwrap();
4141
req.reset();
42-
log.debug({ enqueueResult } as SerializableObject, t('queue.graphQueued'));
42+
log.debug({ enqueueResult } as JsonObject, t('queue.graphQueued'));
4343
} catch (error) {
44-
log.error({ enqueueBatchArg } as SerializableObject, t('queue.graphFailedToQueue'));
44+
log.error({ enqueueBatchArg } as JsonObject, t('queue.graphFailedToQueue'));
4545

4646
if (error instanceof Object && 'status' in error && error.status === 403) {
4747
return;

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { logger } from 'app/logging/logger';
22
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
3-
import type { SerializableObject } from 'common/types';
43
import { zPydanticValidationError } from 'features/system/store/zodSchemas';
54
import { toast } from 'features/toast/toast';
65
import { t } from 'i18next';
76
import { truncate, upperFirst } from 'lodash-es';
87
import { serializeError } from 'serialize-error';
98
import { queueApi } from 'services/api/endpoints/queue';
9+
import type { JsonObject } from 'type-fest';
1010

1111
const log = logger('queue');
1212

@@ -17,7 +17,7 @@ export const addBatchEnqueuedListener = (startAppListening: AppStartListening) =
1717
effect: (action) => {
1818
const enqueueResult = action.payload;
1919
const arg = action.meta.arg.originalArgs;
20-
log.debug({ enqueueResult } as SerializableObject, 'Batch enqueued');
20+
log.debug({ enqueueResult } as JsonObject, 'Batch enqueued');
2121

2222
toast({
2323
id: 'QUEUE_BATCH_SUCCEEDED',
@@ -45,7 +45,7 @@ export const addBatchEnqueuedListener = (startAppListening: AppStartListening) =
4545
status: 'error',
4646
description: t('common.unknownError'),
4747
});
48-
log.error({ batchConfig } as SerializableObject, t('queue.batchFailedToQueue'));
48+
log.error({ batchConfig } as JsonObject, t('queue.batchFailedToQueue'));
4949
return;
5050
}
5151

@@ -71,7 +71,7 @@ export const addBatchEnqueuedListener = (startAppListening: AppStartListening) =
7171
description: t('common.unknownError'),
7272
});
7373
}
74-
log.error({ batchConfig, error: serializeError(response) } as SerializableObject, t('queue.batchFailedToQueue'));
74+
log.error({ batchConfig, error: serializeError(response) } as JsonObject, t('queue.batchFailedToQueue'));
7575
},
7676
});
7777
};

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { logger } from 'app/logging/logger';
22
import { enqueueRequested } from 'app/store/actions';
33
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
4-
import type { SerializableObject } from 'common/types';
54
import type { Result } from 'common/util/result';
65
import { withResult, withResultAsync } from 'common/util/result';
76
import { $canvasManager } from 'features/controlLayers/store/ephemeral';
@@ -14,6 +13,7 @@ import { serializeError } from 'serialize-error';
1413
import { queueApi } from 'services/api/endpoints/queue';
1514
import type { Invocation } from 'services/api/types';
1615
import { assert } from 'tsafe';
16+
import type { JsonObject } from 'type-fest';
1717

1818
const log = logger('generation');
1919

@@ -88,7 +88,7 @@ export const addEnqueueRequestedLinear = (startAppListening: AppStartListening)
8888
return;
8989
}
9090

91-
log.debug({ batchConfig: prepareBatchResult.value } as SerializableObject, 'Enqueued batch');
91+
log.debug({ batchConfig: prepareBatchResult.value } as JsonObject, 'Enqueued batch');
9292
},
9393
});
9494
};

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/getOpenAPISchema.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { logger } from 'app/logging/logger';
22
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
3-
import type { SerializableObject } from 'common/types';
43
import { parseify } from 'common/util/serialize';
54
import { $templates } from 'features/nodes/store/nodesSlice';
65
import { parseSchema } from 'features/nodes/util/schema/parseSchema';
76
import { size } from 'lodash-es';
87
import { serializeError } from 'serialize-error';
98
import { appInfoApi } from 'services/api/endpoints/appInfo';
9+
import type { JsonObject } from 'type-fest';
1010

1111
const log = logger('system');
1212

@@ -16,12 +16,12 @@ export const addGetOpenAPISchemaListener = (startAppListening: AppStartListening
1616
effect: (action, { getState }) => {
1717
const schemaJSON = action.payload;
1818

19-
log.debug({ schemaJSON: parseify(schemaJSON) } as SerializableObject, 'Received OpenAPI schema');
19+
log.debug({ schemaJSON: parseify(schemaJSON) } as JsonObject, 'Received OpenAPI schema');
2020
const { nodesAllowlist, nodesDenylist } = getState().config;
2121

2222
const nodeTemplates = parseSchema(schemaJSON, nodesAllowlist, nodesDenylist);
2323

24-
log.debug({ nodeTemplates } as SerializableObject, `Built ${size(nodeTemplates)} node templates`);
24+
log.debug({ nodeTemplates } as JsonObject, `Built ${size(nodeTemplates)} node templates`);
2525

2626
$templates.set(nodeTemplates);
2727
},

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { logger } from 'app/logging/logger';
22
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
33
import type { AppDispatch, RootState } from 'app/store/store';
4-
import type { SerializableObject } from 'common/types';
54
import {
65
controlLayerModelChanged,
76
referenceImageIPAdapterModelChanged,
@@ -41,6 +40,7 @@ import {
4140
isSpandrelImageToImageModelConfig,
4241
isT5EncoderModelConfig,
4342
} from 'services/api/types';
43+
import type { JsonObject } from 'type-fest';
4444

4545
const log = logger('models');
4646

@@ -85,7 +85,7 @@ type ModelHandler = (
8585
models: AnyModelConfig[],
8686
state: RootState,
8787
dispatch: AppDispatch,
88-
log: Logger<SerializableObject>
88+
log: Logger<JsonObject>
8989
) => undefined;
9090

9191
const handleMainModels: ModelHandler = (models, state, dispatch, log) => {

invokeai/frontend/web/src/app/store/store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { autoBatchEnhancer, combineReducers, configureStore } from '@reduxjs/too
33
import { logger } from 'app/logging/logger';
44
import { idbKeyValDriver } from 'app/store/enhancers/reduxRemember/driver';
55
import { errorHandler } from 'app/store/enhancers/reduxRemember/errors';
6-
import type { SerializableObject } from 'common/types';
76
import { deepClone } from 'common/util/deepClone';
87
import { changeBoardModalSlice } from 'features/changeBoardModal/store/slice';
98
import { canvasSettingsPersistConfig, canvasSettingsSlice } from 'features/controlLayers/store/canvasSettingsSlice';
@@ -37,6 +36,7 @@ import undoable from 'redux-undo';
3736
import { serializeError } from 'serialize-error';
3837
import { api } from 'services/api';
3938
import { authToastMiddleware } from 'services/api/authToastMiddleware';
39+
import type { JsonObject } from 'type-fest';
4040

4141
import { STORAGE_PREFIX } from './constants';
4242
import { actionSanitizer } from './middleware/devtools/actionSanitizer';
@@ -139,7 +139,7 @@ const unserialize: UnserializeFunction = (data, key) => {
139139
{
140140
persistedData: parsed,
141141
rehydratedData: transformed,
142-
diff: diff(parsed, transformed) as SerializableObject, // this is always serializable
142+
diff: diff(parsed, transformed) as JsonObject, // this is always serializable
143143
},
144144
`Rehydrated slice "${key}"`
145145
);

invokeai/frontend/web/src/common/types.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

invokeai/frontend/web/src/features/controlLayers/hooks/saveCanvasHooks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { logger } from 'app/logging/logger';
22
import { useAppDispatch, useAppSelector, useAppStore } from 'app/store/storeHooks';
3-
import type { SerializableObject } from 'common/types';
43
import { deepClone } from 'common/util/deepClone';
54
import { withResultAsync } from 'common/util/result';
65
import { useCanvasManager } from 'features/controlLayers/contexts/CanvasManagerProviderGate';
@@ -31,6 +30,7 @@ import { useCallback, useMemo } from 'react';
3130
import { useTranslation } from 'react-i18next';
3231
import { serializeError } from 'serialize-error';
3332
import type { ImageDTO } from 'services/api/types';
33+
import type { JsonObject } from 'type-fest';
3434

3535
const log = logger('canvas');
3636

@@ -64,7 +64,7 @@ const useSaveCanvas = ({ region, saveToGallery, toastOk, toastError, onSave, wit
6464
return;
6565
}
6666

67-
let metadata: SerializableObject | undefined = undefined;
67+
let metadata: JsonObject | undefined = undefined;
6868

6969
if (withMetadata) {
7070
metadata = selectCanvasMetadata(store.getState());

invokeai/frontend/web/src/features/controlLayers/konva/CanvasCompositorModule.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { SerializableObject } from 'common/types';
21
import { withResultAsync } from 'common/util/result';
32
import { CanvasCacheModule } from 'features/controlLayers/konva/CanvasCacheModule';
43
import type { CanvasEntityAdapter, CanvasEntityAdapterFromType } from 'features/controlLayers/konva/CanvasEntity/types';
@@ -41,6 +40,7 @@ import type { ImageDTO } from 'services/api/types';
4140
import stableHash from 'stable-hash';
4241
import type { Equals } from 'tsafe';
4342
import { assert } from 'tsafe';
43+
import type { JsonObject } from 'type-fest';
4444

4545
type CompositingOptions = {
4646
/**
@@ -173,14 +173,14 @@ export class CanvasCompositorModule extends CanvasModuleBase {
173173
return adapters as CanvasEntityAdapterFromType<T>[];
174174
};
175175

176-
getCompositeHash = (adapters: CanvasEntityAdapter[], extra: SerializableObject): string => {
177-
const adapterHashes: SerializableObject[] = [];
176+
getCompositeHash = (adapters: CanvasEntityAdapter[], extra: JsonObject): string => {
177+
const adapterHashes: JsonObject[] = [];
178178

179179
for (const adapter of adapters) {
180180
adapterHashes.push(adapter.getHashableState());
181181
}
182182

183-
const data: SerializableObject = {
183+
const data: JsonObject = {
184184
extra,
185185
adapterHashes,
186186
};

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterBase.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { Selector } from '@reduxjs/toolkit';
22
import { createSelector } from '@reduxjs/toolkit';
33
import type { RootState } from 'app/store/store';
4-
import type { SerializableObject } from 'common/types';
54
import { deepClone } from 'common/util/deepClone';
65
import type { CanvasEntityBufferObjectRenderer } from 'features/controlLayers/konva/CanvasEntity/CanvasEntityBufferObjectRenderer';
76
import type { CanvasEntityFilterer } from 'features/controlLayers/konva/CanvasEntity/CanvasEntityFilterer';
@@ -37,6 +36,7 @@ import type { Logger } from 'roarr';
3736
import type { ImageDTO } from 'services/api/types';
3837
import stableHash from 'stable-hash';
3938
import { assert } from 'tsafe';
39+
import type { Jsonifiable, JsonObject } from 'type-fest';
4040

4141
// Ideally, we'd type `adapter` as `CanvasEntityAdapterBase`, but the generics make this tricky. `CanvasEntityAdapter`
4242
// is a union of all entity adapters and is functionally identical to `CanvasEntityAdapterBase`. We'll need to do a
@@ -111,7 +111,7 @@ export abstract class CanvasEntityAdapterBase<
111111
*
112112
* This is used for caching.
113113
*/
114-
abstract getHashableState: () => SerializableObject;
114+
abstract getHashableState: () => JsonObject;
115115

116116
/**
117117
* Callbacks that are executed when the module is initialized.
@@ -566,7 +566,7 @@ export abstract class CanvasEntityAdapterBase<
566566
* Gets a hash of the entity's state, as provided by `getHashableState`. If `extra` is provided, it will be included in
567567
* the hash.
568568
*/
569-
hash = (extra?: SerializableObject): string => {
569+
hash = (extra?: Jsonifiable): string => {
570570
const arg = {
571571
state: this.getHashableState(),
572572
extra,
@@ -614,8 +614,8 @@ export abstract class CanvasEntityAdapterBase<
614614
transformer: this.transformer.repr(),
615615
renderer: this.renderer.repr(),
616616
bufferRenderer: this.bufferRenderer.repr(),
617-
segmentAnything: this.segmentAnything?.repr(),
618-
filterer: this.filterer?.repr(),
617+
segmentAnything: this.segmentAnything?.repr() ?? null,
618+
filterer: this.filterer?.repr() ?? null,
619619
hasCache: this.$canvasCache.get() !== null,
620620
isLocked: this.$isLocked.get(),
621621
isDisabled: this.$isDisabled.get(),

0 commit comments

Comments
 (0)