Skip to content

Commit 289652d

Browse files
authored
add getVisibleTypes API to SO type registry (#70559) (#70578)
* add getVisibleTypes API * doc nit * fix mocking in tests
1 parent 58a751d commit 289652d

10 files changed

Lines changed: 70 additions & 16 deletions

docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
## SavedObjectTypeRegistry.getAllTypes() method
66

7-
Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered.
7+
Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered, including the hidden ones.
8+
9+
To only get the visible types (which is the most common use case), use `getVisibleTypes` instead.
810

911
<b>Signature:</b>
1012

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
2+
3+
[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) &gt; [getVisibleTypes](./kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md)
4+
5+
## SavedObjectTypeRegistry.getVisibleTypes() method
6+
7+
Returns all visible [types](./kibana-plugin-core-server.savedobjectstype.md)<!-- -->.
8+
9+
A visible type is a type that doesn't explicitly define `hidden=true` during registration.
10+
11+
<b>Signature:</b>
12+
13+
```typescript
14+
getVisibleTypes(): SavedObjectsType[];
15+
```
16+
<b>Returns:</b>
17+
18+
`SavedObjectsType[]`
19+

docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ export declare class SavedObjectTypeRegistry
1616

1717
| Method | Modifiers | Description |
1818
| --- | --- | --- |
19-
| [getAllTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md) | | Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered. |
19+
| [getAllTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getalltypes.md) | | Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered, including the hidden ones.<!-- -->To only get the visible types (which is the most common use case), use <code>getVisibleTypes</code> instead. |
2020
| [getImportableAndExportableTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getimportableandexportabletypes.md) | | Return all [types](./kibana-plugin-core-server.savedobjectstype.md) currently registered that are importable/exportable. |
2121
| [getIndex(type)](./kibana-plugin-core-server.savedobjecttyperegistry.getindex.md) | | Returns the <code>indexPattern</code> property for given type, or <code>undefined</code> if the type is not registered. |
2222
| [getType(type)](./kibana-plugin-core-server.savedobjecttyperegistry.gettype.md) | | Return the [type](./kibana-plugin-core-server.savedobjectstype.md) definition for given type name. |
23+
| [getVisibleTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md) | | Returns all visible [types](./kibana-plugin-core-server.savedobjectstype.md)<!-- -->.<!-- -->A visible type is a type that doesn't explicitly define <code>hidden=true</code> during registration. |
2324
| [isHidden(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md) | | Returns the <code>hidden</code> property for given type, or <code>false</code> if the type is not registered. |
2425
| [isImportableAndExportable(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md) | | Returns the <code>management.importableAndExportable</code> property for given type, or <code>false</code> if the type is not registered or does not define a management section. |
2526
| [isMultiNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md) | | Returns whether the type is multi-namespace (shareable); resolves to <code>false</code> if the type is not registered |

src/core/server/saved_objects/saved_objects_type_registry.mock.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const createRegistryMock = (): jest.Mocked<
2525
const mock = {
2626
registerType: jest.fn(),
2727
getType: jest.fn(),
28+
getVisibleTypes: jest.fn(),
2829
getAllTypes: jest.fn(),
2930
getImportableAndExportableTypes: jest.fn(),
3031
isNamespaceAgnostic: jest.fn(),
@@ -35,6 +36,7 @@ const createRegistryMock = (): jest.Mocked<
3536
isImportableAndExportable: jest.fn(),
3637
};
3738

39+
mock.getVisibleTypes.mockReturnValue([]);
3840
mock.getAllTypes.mockReturnValue([]);
3941
mock.getImportableAndExportableTypes.mockReturnValue([]);
4042
mock.getIndex.mockReturnValue('.kibana-test');

src/core/server/saved_objects/saved_objects_type_registry.test.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,37 @@ describe('SavedObjectTypeRegistry', () => {
9999
});
100100
});
101101

102+
describe('#getVisibleTypes', () => {
103+
it('returns only visible registered types', () => {
104+
const typeA = createType({ name: 'typeA', hidden: false });
105+
const typeB = createType({ name: 'typeB', hidden: true });
106+
const typeC = createType({ name: 'typeC', hidden: false });
107+
registry.registerType(typeA);
108+
registry.registerType(typeB);
109+
registry.registerType(typeC);
110+
111+
const registered = registry.getVisibleTypes();
112+
expect(registered.length).toEqual(2);
113+
expect(registered).toContainEqual(typeA);
114+
expect(registered).toContainEqual(typeC);
115+
});
116+
117+
it('does not mutate the registered types when altering the list', () => {
118+
registry.registerType(createType({ name: 'typeA', hidden: false }));
119+
registry.registerType(createType({ name: 'typeB', hidden: true }));
120+
registry.registerType(createType({ name: 'typeC', hidden: false }));
121+
122+
const types = registry.getVisibleTypes();
123+
types.splice(0, 2);
124+
125+
expect(registry.getVisibleTypes().length).toEqual(2);
126+
});
127+
});
128+
102129
describe('#getAllTypes', () => {
103130
it('returns all registered types', () => {
104131
const typeA = createType({ name: 'typeA' });
105-
const typeB = createType({ name: 'typeB' });
132+
const typeB = createType({ name: 'typeB', hidden: true });
106133
const typeC = createType({ name: 'typeC' });
107134
registry.registerType(typeA);
108135
registry.registerType(typeB);

src/core/server/saved_objects/saved_objects_type_registry.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,18 @@ export class SavedObjectTypeRegistry {
5454
}
5555

5656
/**
57-
* Return all {@link SavedObjectsType | types} currently registered.
57+
* Returns all visible {@link SavedObjectsType | types}.
58+
*
59+
* A visible type is a type that doesn't explicitly define `hidden=true` during registration.
60+
*/
61+
public getVisibleTypes() {
62+
return [...this.types.values()].filter((type) => !this.isHidden(type.name));
63+
}
64+
65+
/**
66+
* Return all {@link SavedObjectsType | types} currently registered, including the hidden ones.
67+
*
68+
* To only get the visible types (which is the most common use case), use `getVisibleTypes` instead.
5869
*/
5970
public getAllTypes() {
6071
return [...this.types.values()];

src/core/server/server.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2468,6 +2468,7 @@ export class SavedObjectTypeRegistry {
24682468
getImportableAndExportableTypes(): SavedObjectsType[];
24692469
getIndex(type: string): string | undefined;
24702470
getType(type: string): SavedObjectsType | undefined;
2471+
getVisibleTypes(): SavedObjectsType[];
24712472
isHidden(type: string): boolean;
24722473
isImportableAndExportable(type: string): boolean;
24732474
isMultiNamespace(type: string): boolean;

src/legacy/server/saved_objects/saved_objects_mixin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ export function savedObjectsMixin(kbnServer, server) {
3434
const typeRegistry = kbnServer.newPlatform.start.core.savedObjects.getTypeRegistry();
3535
const mappings = migrator.getActiveMappings();
3636
const allTypes = typeRegistry.getAllTypes().map((t) => t.name);
37+
const visibleTypes = typeRegistry.getVisibleTypes().map((t) => t.name);
3738
const schema = new SavedObjectsSchema(convertTypesToLegacySchema(typeRegistry.getAllTypes()));
38-
const visibleTypes = allTypes.filter((type) => !schema.isHiddenType(type));
3939

4040
server.decorate('server', 'kibanaMigrator', migrator);
4141

x-pack/plugins/features/server/plugin.test.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,13 @@ const initContext = coreMock.createPluginInitializerContext();
1010
const coreSetup = coreMock.createSetup();
1111
const coreStart = coreMock.createStart();
1212
const typeRegistry = savedObjectsServiceMock.createTypeRegistryMock();
13-
typeRegistry.getAllTypes.mockReturnValue([
13+
typeRegistry.getVisibleTypes.mockReturnValue([
1414
{
1515
name: 'foo',
1616
hidden: false,
1717
mappings: { properties: {} },
1818
namespaceType: 'single' as 'single',
1919
},
20-
{
21-
name: 'bar',
22-
hidden: true,
23-
mappings: { properties: {} },
24-
namespaceType: 'agnostic' as 'agnostic',
25-
},
2620
]);
2721
coreStart.savedObjects.getTypeRegistry.mockReturnValue(typeRegistry);
2822

x-pack/plugins/features/server/plugin.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,7 @@ export class Plugin {
8080

8181
private registerOssFeatures(savedObjects: SavedObjectsServiceStart) {
8282
const registry = savedObjects.getTypeRegistry();
83-
const savedObjectTypes = registry
84-
.getAllTypes()
85-
.filter((t) => !t.hidden)
86-
.map((t) => t.name);
83+
const savedObjectTypes = registry.getVisibleTypes().map((t) => t.name);
8784

8885
this.logger.debug(
8986
`Registering OSS features with SO types: ${savedObjectTypes.join(', ')}. "includeTimelion": ${

0 commit comments

Comments
 (0)