Skip to content

Commit 22ccf3d

Browse files
committed
force savedObject consumers to define type explicitly
1 parent 7b125e3 commit 22ccf3d

57 files changed

Lines changed: 324 additions & 246 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/core/public/saved_objects/saved_objects_client.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { resolve as resolveUrl } from 'url';
2222

2323
import {
2424
SavedObject,
25-
SavedObjectAttributes,
2625
SavedObjectReference,
2726
SavedObjectsClientContract as SavedObjectsApi,
2827
SavedObjectsFindOptions as SavedObjectFindOptionsServer,
@@ -61,9 +60,7 @@ export interface SavedObjectsCreateOptions {
6160
*
6261
* @public
6362
*/
64-
export interface SavedObjectsBulkCreateObject<
65-
T extends SavedObjectAttributes = SavedObjectAttributes
66-
> extends SavedObjectsCreateOptions {
63+
export interface SavedObjectsBulkCreateObject<T = unknown> extends SavedObjectsCreateOptions {
6764
type: string;
6865
attributes: T;
6966
}
@@ -75,9 +72,7 @@ export interface SavedObjectsBulkCreateOptions {
7572
}
7673

7774
/** @public */
78-
export interface SavedObjectsBulkUpdateObject<
79-
T extends SavedObjectAttributes = SavedObjectAttributes
80-
> {
75+
export interface SavedObjectsBulkUpdateObject<T = unknown> {
8176
type: string;
8277
id: string;
8378
attributes: T;
@@ -99,9 +94,7 @@ export interface SavedObjectsUpdateOptions {
9994
}
10095

10196
/** @public */
102-
export interface SavedObjectsBatchResponse<
103-
T extends SavedObjectAttributes = SavedObjectAttributes
104-
> {
97+
export interface SavedObjectsBatchResponse<T = unknown> {
10598
savedObjects: Array<SimpleSavedObject<T>>;
10699
}
107100

@@ -113,9 +106,7 @@ export interface SavedObjectsBatchResponse<
113106
*
114107
* @public
115108
*/
116-
export interface SavedObjectsFindResponsePublic<
117-
T extends SavedObjectAttributes = SavedObjectAttributes
118-
> extends SavedObjectsBatchResponse<T> {
109+
export interface SavedObjectsFindResponsePublic<T = unknown> extends SavedObjectsBatchResponse<T> {
119110
total: number;
120111
perPage: number;
121112
page: number;
@@ -124,7 +115,7 @@ export interface SavedObjectsFindResponsePublic<
124115
interface BatchQueueEntry {
125116
type: string;
126117
id: string;
127-
resolve: <T extends SavedObjectAttributes>(value: SimpleSavedObject<T> | SavedObject<T>) => void;
118+
resolve: <T = unknown>(value: SimpleSavedObject<T> | SavedObject<T>) => void;
128119
reject: (reason?: any) => void;
129120
}
130121

@@ -207,7 +198,7 @@ export class SavedObjectsClient {
207198
* @param options
208199
* @returns
209200
*/
210-
public create = <T extends SavedObjectAttributes>(
201+
public create = <T = unknown>(
211202
type: string,
212203
attributes: T,
213204
options: SavedObjectsCreateOptions = {}
@@ -300,7 +291,7 @@ export class SavedObjectsClient {
300291
* @property {object} [options.hasReference] - { type, id }
301292
* @returns A find result with objects matching the specified search.
302293
*/
303-
public find = <T extends SavedObjectAttributes>(
294+
public find = <T = unknown>(
304295
options: SavedObjectsFindOptions
305296
): Promise<SavedObjectsFindResponsePublic<T>> => {
306297
const path = this.getPath(['_find']);
@@ -348,10 +339,7 @@ export class SavedObjectsClient {
348339
* @param {string} id
349340
* @returns The saved object for the given type and id.
350341
*/
351-
public get = <T extends SavedObjectAttributes>(
352-
type: string,
353-
id: string
354-
): Promise<SimpleSavedObject<T>> => {
342+
public get = <T = unknown>(type: string, id: string): Promise<SimpleSavedObject<T>> => {
355343
if (!type || !id) {
356344
return Promise.reject(new Error('requires type and id'));
357345
}
@@ -402,7 +390,7 @@ export class SavedObjectsClient {
402390
* @prop {object} options.migrationVersion - The optional migrationVersion of this document
403391
* @returns
404392
*/
405-
public update<T extends SavedObjectAttributes>(
393+
public update<T = unknown>(
406394
type: string,
407395
id: string,
408396
attributes: T,
@@ -434,7 +422,7 @@ export class SavedObjectsClient {
434422
* @param {array} objects - [{ type, id, attributes, options: { version, references } }]
435423
* @returns The result of the update operation containing both failed and updated saved objects.
436424
*/
437-
public bulkUpdate<T extends SavedObjectAttributes>(objects: SavedObjectsBulkUpdateObject[] = []) {
425+
public bulkUpdate<T = unknown>(objects: SavedObjectsBulkUpdateObject[] = []) {
438426
const path = this.getPath(['_bulk_update']);
439427

440428
return this.savedObjectsFetch(path, {
@@ -449,9 +437,7 @@ export class SavedObjectsClient {
449437
});
450438
}
451439

452-
private createSavedObject<T extends SavedObjectAttributes>(
453-
options: SavedObject<T>
454-
): SimpleSavedObject<T> {
440+
private createSavedObject<T = unknown>(options: SavedObject<T>): SimpleSavedObject<T> {
455441
return new SimpleSavedObject(this, options);
456442
}
457443

src/core/public/saved_objects/simple_saved_object.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import { get, has, set } from 'lodash';
21-
import { SavedObject as SavedObjectType, SavedObjectAttributes } from '../../server';
21+
import { SavedObject as SavedObjectType } from '../../server';
2222
import { SavedObjectsClientContract } from './saved_objects_client';
2323

2424
/**
@@ -30,7 +30,7 @@ import { SavedObjectsClientContract } from './saved_objects_client';
3030
*
3131
* @public
3232
*/
33-
export class SimpleSavedObject<T extends SavedObjectAttributes> {
33+
export class SimpleSavedObject<T = unknown> {
3434
public attributes: T;
3535
// We want to use the same interface this class had in JS
3636
public _version?: SavedObjectType<T>['version'];
@@ -46,7 +46,7 @@ export class SimpleSavedObject<T extends SavedObjectAttributes> {
4646
) {
4747
this.id = id;
4848
this.type = type;
49-
this.attributes = attributes || {};
49+
this.attributes = attributes || ({} as T);
5050
this.references = references || [];
5151
this._version = version;
5252
this.migrationVersion = migrationVersion;

src/core/server/saved_objects/import/collect_saved_objects.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ export async function collectSavedObjects({
4242
supportedTypes,
4343
}: CollectSavedObjectsOptions) {
4444
const errors: SavedObjectsImportError[] = [];
45-
const collectedObjects: SavedObject[] = await createPromiseFromStreams([
45+
const collectedObjects: Array<SavedObject<{ title: string }>> = await createPromiseFromStreams([
4646
readStream,
4747
createLimitStream(objectLimit),
48-
createFilterStream<SavedObject>(obj => {
48+
createFilterStream<SavedObject<{ title: string }>>(obj => {
4949
if (supportedTypes.includes(obj.type)) {
5050
return true;
5151
}

src/core/server/saved_objects/import/extract_errors.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import { SavedObject } from '../types';
2020
import { SavedObjectsImportError } from './types';
2121

2222
export function extractErrors(
23-
savedObjectResults: SavedObject[],
24-
savedObjectsToImport: SavedObject[]
23+
savedObjectResults: Array<SavedObject<any>>,
24+
savedObjectsToImport: Array<SavedObject<any>>
2525
) {
2626
const errors: SavedObjectsImportError[] = [];
27-
const originalSavedObjectsMap = new Map<string, SavedObject>();
27+
const originalSavedObjectsMap = new Map<string, SavedObject<{ title: string }>>();
2828
for (const savedObject of savedObjectsToImport) {
2929
originalSavedObjectsMap.set(`${savedObject.type}:${savedObject.id}`, savedObject);
3030
}

src/core/server/saved_objects/import/validate_references.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export async function getNonExistingReferenceAsKeys(
7777
}
7878

7979
export async function validateReferences(
80-
savedObjects: SavedObject[],
80+
savedObjects: Array<SavedObject<{ title?: string }>>,
8181
savedObjectsClient: SavedObjectsClientContract,
8282
namespace?: string
8383
) {

src/core/server/saved_objects/management/management.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ interface SavedObjectsManagementTypeDefinition {
2323
isImportableAndExportable?: boolean;
2424
defaultSearchField?: string;
2525
icon?: string;
26-
getTitle?: (savedObject: SavedObject) => string;
27-
getEditUrl?: (savedObject: SavedObject) => string;
28-
getInAppUrl?: (savedObject: SavedObject) => { path: string; uiCapabilitiesPath: string };
26+
getTitle?: (savedObject: SavedObject<any>) => string;
27+
getEditUrl?: (savedObject: SavedObject<any>) => string;
28+
getInAppUrl?: (savedObject: SavedObject<any>) => { path: string; uiCapabilitiesPath: string };
2929
}
3030

3131
export interface SavedObjectsManagementDefinition {

src/core/server/saved_objects/serialization/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export interface SavedObjectsRawDocSource {
5050
* scenario out of the box.
5151
*/
5252
interface SavedObjectDoc {
53-
attributes: object;
53+
attributes: unknown;
5454
id?: string; // NOTE: SavedObjectDoc is used for uncreated objects where `id` is optional
5555
type: string;
5656
namespace?: string;

src/core/server/saved_objects/service/lib/repository.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ import {
4848
} from '../saved_objects_client';
4949
import {
5050
SavedObject,
51-
SavedObjectAttributes,
5251
SavedObjectsBaseOptions,
5352
SavedObjectsFindOptions,
5453
SavedObjectsMigrationVersion,
@@ -213,7 +212,7 @@ export class SavedObjectsRepository {
213212
* @property {array} [options.references=[]] - [{ name, type, id }]
214213
* @returns {promise} - { id, type, version, attributes }
215214
*/
216-
public async create<T extends SavedObjectAttributes>(
215+
public async create<T = unknown>(
217216
type: string,
218217
attributes: T,
219218
options: SavedObjectsCreateOptions = {}
@@ -254,7 +253,7 @@ export class SavedObjectsRepository {
254253
body: raw._source,
255254
});
256255

257-
return this._rawToSavedObject({
256+
return this._rawToSavedObject<T>({
258257
...raw,
259258
...response,
260259
});
@@ -277,7 +276,7 @@ export class SavedObjectsRepository {
277276
* @property {string} [options.namespace]
278277
* @returns {promise} - {saved_objects: [[{ id, type, version, references, attributes, error: { message } }]}
279278
*/
280-
async bulkCreate<T extends SavedObjectAttributes = any>(
279+
async bulkCreate<T = unknown>(
281280
objects: Array<SavedObjectsBulkCreateObject<T>>,
282281
options: SavedObjectsCreateOptions = {}
283282
): Promise<SavedObjectsBulkResponse<T>> {
@@ -464,7 +463,7 @@ export class SavedObjectsRepository {
464463
* @property {object} [options.hasReference] - { type, id }
465464
* @returns {promise} - { saved_objects: [{ id, type, version, attributes }], total, per_page, page }
466465
*/
467-
async find<T extends SavedObjectAttributes = any>({
466+
async find<T = unknown>({
468467
search,
469468
defaultSearchOperator = 'OR',
470469
searchFields,
@@ -577,7 +576,7 @@ export class SavedObjectsRepository {
577576
* { id: 'foo', type: 'index-pattern' }
578577
* ])
579578
*/
580-
async bulkGet<T extends SavedObjectAttributes = any>(
579+
async bulkGet<T = unknown>(
581580
objects: SavedObjectsBulkGetObject[] = [],
582581
options: SavedObjectsBaseOptions = {}
583582
): Promise<SavedObjectsBulkResponse<T>> {
@@ -648,7 +647,7 @@ export class SavedObjectsRepository {
648647
* @property {string} [options.namespace]
649648
* @returns {promise} - { id, type, version, attributes }
650649
*/
651-
async get<T extends SavedObjectAttributes = any>(
650+
async get<T = unknown>(
652651
type: string,
653652
id: string,
654653
options: SavedObjectsBaseOptions = {}
@@ -696,7 +695,7 @@ export class SavedObjectsRepository {
696695
* @property {array} [options.references] - [{ name, type, id }]
697696
* @returns {promise}
698697
*/
699-
async update<T extends SavedObjectAttributes = any>(
698+
async update<T = unknown>(
700699
type: string,
701700
id: string,
702701
attributes: Partial<T>,
@@ -753,7 +752,7 @@ export class SavedObjectsRepository {
753752
* @property {string} [options.namespace]
754753
* @returns {promise} - {saved_objects: [[{ id, type, version, references, attributes, error: { message } }]}
755754
*/
756-
async bulkUpdate<T extends SavedObjectAttributes = any>(
755+
async bulkUpdate<T = unknown>(
757756
objects: Array<SavedObjectsBulkUpdateObject<T>>,
758757
options: SavedObjectsBulkUpdateOptions = {}
759758
): Promise<SavedObjectsBulkUpdateResponse<T>> {
@@ -972,7 +971,7 @@ export class SavedObjectsRepository {
972971
// includes the namespace, and we use this for migrating documents. However, we don't
973972
// want the namespace to be returned from the repository, as the repository scopes each
974973
// method transparently to the specified namespace.
975-
private _rawToSavedObject(raw: SavedObjectsRawDoc): SavedObject {
974+
private _rawToSavedObject<T = unknown>(raw: SavedObjectsRawDoc): SavedObject<T> {
976975
const savedObject = this._serializer.rawToSavedObject(raw);
977976
return omit(savedObject, 'namespace');
978977
}

0 commit comments

Comments
 (0)