@backstage/plugin-search-backend 1.5.18-next.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/alpha/package.json +1 -1
- package/dist/alpha.cjs.js +3 -112
- package/dist/alpha.cjs.js.map +1 -1
- package/dist/alpha.d.ts +3 -6
- package/dist/index.cjs.js +5 -10
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/plugin.cjs.js +110 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/schema/openapi.generated.cjs.js +243 -0
- package/dist/schema/openapi.generated.cjs.js.map +1 -0
- package/dist/service/AuthorizedSearchEngine.cjs.js +151 -0
- package/dist/service/AuthorizedSearchEngine.cjs.js.map +1 -0
- package/dist/service/router.cjs.js +134 -0
- package/dist/service/router.cjs.js.map +1 -0
- package/package.json +15 -14
- package/dist/cjs/router-Ci5jjVmK.cjs.js +0 -500
- package/dist/cjs/router-Ci5jjVmK.cjs.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @backstage/plugin-search-backend
|
|
2
2
|
|
|
3
|
+
## 1.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3109c24: The export for the new backend system at the `/alpha` export is now also available via the main entry point, which means that you can remove the `/alpha` suffix from the import.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 66af016: Fix to schema to allow arbitrary query parameters.
|
|
12
|
+
- 094eaa3: Remove references to in-repo backend-common
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
- @backstage/backend-defaults@0.5.1
|
|
15
|
+
- @backstage/plugin-search-backend-node@1.3.3
|
|
16
|
+
- @backstage/plugin-permission-node@0.8.4
|
|
17
|
+
- @backstage/backend-openapi-utils@0.2.0
|
|
18
|
+
- @backstage/backend-plugin-api@1.0.1
|
|
19
|
+
- @backstage/config@1.2.0
|
|
20
|
+
- @backstage/errors@1.2.4
|
|
21
|
+
- @backstage/types@1.1.1
|
|
22
|
+
- @backstage/plugin-permission-common@0.8.1
|
|
23
|
+
- @backstage/plugin-search-common@1.2.14
|
|
24
|
+
|
|
25
|
+
## 1.5.18-next.2
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- 66af016: Fix to schema to allow arbitrary query parameters.
|
|
30
|
+
- Updated dependencies
|
|
31
|
+
- @backstage/backend-defaults@0.5.1-next.2
|
|
32
|
+
- @backstage/backend-openapi-utils@0.2.0-next.1
|
|
33
|
+
- @backstage/backend-plugin-api@1.0.1-next.1
|
|
34
|
+
- @backstage/config@1.2.0
|
|
35
|
+
- @backstage/errors@1.2.4
|
|
36
|
+
- @backstage/types@1.1.1
|
|
37
|
+
- @backstage/plugin-permission-common@0.8.1
|
|
38
|
+
- @backstage/plugin-permission-node@0.8.4-next.1
|
|
39
|
+
- @backstage/plugin-search-backend-node@1.3.3-next.2
|
|
40
|
+
- @backstage/plugin-search-common@1.2.14
|
|
41
|
+
|
|
3
42
|
## 1.5.18-next.1
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/alpha.cjs.js
CHANGED
|
@@ -2,118 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
var pluginSearchBackendNode = require('@backstage/plugin-search-backend-node');
|
|
7
|
-
var alpha$1 = require('@backstage/plugin-search-backend-node/alpha');
|
|
8
|
-
var router = require('./cjs/router-Ci5jjVmK.cjs.js');
|
|
9
|
-
require('zod');
|
|
10
|
-
require('@backstage/backend-common');
|
|
11
|
-
require('@backstage/errors');
|
|
12
|
-
require('@backstage/plugin-permission-common');
|
|
13
|
-
require('lodash');
|
|
14
|
-
require('qs');
|
|
15
|
-
require('dataloader');
|
|
16
|
-
require('@backstage/backend-openapi-utils');
|
|
17
|
-
require('@backstage/backend-defaults/discovery');
|
|
5
|
+
var plugin = require('./plugin.cjs.js');
|
|
18
6
|
|
|
19
|
-
|
|
20
|
-
collators = [];
|
|
21
|
-
decorators = [];
|
|
22
|
-
addCollator(options) {
|
|
23
|
-
this.collators.push(options);
|
|
24
|
-
}
|
|
25
|
-
addDecorator(options) {
|
|
26
|
-
this.decorators.push(options);
|
|
27
|
-
}
|
|
28
|
-
getCollators() {
|
|
29
|
-
return this.collators;
|
|
30
|
-
}
|
|
31
|
-
getDecorators() {
|
|
32
|
-
return this.decorators;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
class SearchEngineRegistry {
|
|
36
|
-
searchEngine = null;
|
|
37
|
-
setSearchEngine(searchEngine) {
|
|
38
|
-
if (this.searchEngine) {
|
|
39
|
-
throw new Error("Multiple Search engines is not supported at this time");
|
|
40
|
-
}
|
|
41
|
-
this.searchEngine = searchEngine;
|
|
42
|
-
}
|
|
43
|
-
getSearchEngine() {
|
|
44
|
-
return this.searchEngine;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
var alpha = backendPluginApi.createBackendPlugin({
|
|
48
|
-
pluginId: "search",
|
|
49
|
-
register(env) {
|
|
50
|
-
const searchIndexRegistry = new SearchIndexRegistry();
|
|
51
|
-
env.registerExtensionPoint(
|
|
52
|
-
alpha$1.searchIndexRegistryExtensionPoint,
|
|
53
|
-
searchIndexRegistry
|
|
54
|
-
);
|
|
55
|
-
const searchEngineRegistry = new SearchEngineRegistry();
|
|
56
|
-
env.registerExtensionPoint(
|
|
57
|
-
alpha$1.searchEngineRegistryExtensionPoint,
|
|
58
|
-
searchEngineRegistry
|
|
59
|
-
);
|
|
60
|
-
env.registerInit({
|
|
61
|
-
deps: {
|
|
62
|
-
logger: backendPluginApi.coreServices.logger,
|
|
63
|
-
config: backendPluginApi.coreServices.rootConfig,
|
|
64
|
-
discovery: backendPluginApi.coreServices.discovery,
|
|
65
|
-
permissions: backendPluginApi.coreServices.permissions,
|
|
66
|
-
auth: backendPluginApi.coreServices.auth,
|
|
67
|
-
http: backendPluginApi.coreServices.httpRouter,
|
|
68
|
-
httpAuth: backendPluginApi.coreServices.httpAuth,
|
|
69
|
-
lifecycle: backendPluginApi.coreServices.rootLifecycle,
|
|
70
|
-
searchIndexService: alpha$1.searchIndexServiceRef
|
|
71
|
-
},
|
|
72
|
-
async init({
|
|
73
|
-
config,
|
|
74
|
-
logger,
|
|
75
|
-
discovery,
|
|
76
|
-
permissions,
|
|
77
|
-
auth,
|
|
78
|
-
http,
|
|
79
|
-
httpAuth,
|
|
80
|
-
lifecycle,
|
|
81
|
-
searchIndexService
|
|
82
|
-
}) {
|
|
83
|
-
let searchEngine = searchEngineRegistry.getSearchEngine();
|
|
84
|
-
if (!searchEngine) {
|
|
85
|
-
searchEngine = new pluginSearchBackendNode.LunrSearchEngine({
|
|
86
|
-
logger
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
const collators = searchIndexRegistry.getCollators();
|
|
90
|
-
const decorators = searchIndexRegistry.getDecorators();
|
|
91
|
-
searchIndexService.init({
|
|
92
|
-
searchEngine,
|
|
93
|
-
collators,
|
|
94
|
-
decorators
|
|
95
|
-
});
|
|
96
|
-
lifecycle.addStartupHook(async () => {
|
|
97
|
-
await searchIndexService.start();
|
|
98
|
-
});
|
|
99
|
-
lifecycle.addShutdownHook(async () => {
|
|
100
|
-
await searchIndexService.stop();
|
|
101
|
-
});
|
|
102
|
-
const router$1 = await router.createRouter({
|
|
103
|
-
config,
|
|
104
|
-
discovery,
|
|
105
|
-
permissions,
|
|
106
|
-
auth,
|
|
107
|
-
httpAuth,
|
|
108
|
-
logger,
|
|
109
|
-
engine: searchEngine,
|
|
110
|
-
types: searchIndexService.getDocumentTypes()
|
|
111
|
-
});
|
|
112
|
-
http.use(router$1);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
});
|
|
7
|
+
const _feature = plugin.default;
|
|
117
8
|
|
|
118
|
-
exports.default =
|
|
9
|
+
exports.default = _feature;
|
|
119
10
|
//# sourceMappingURL=alpha.cjs.js.map
|
package/dist/alpha.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.cjs.js","sources":["../src/alpha.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"alpha.cjs.js","sources":["../src/alpha.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { default as feature } from './plugin';\n\n/** @alpha */\nconst _feature = feature;\nexport default _feature;\n"],"names":["feature"],"mappings":";;;;;;AAmBA,MAAM,QAAW,GAAAA;;;;"}
|
package/dist/alpha.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
* @alpha
|
|
6
|
-
*/
|
|
7
|
-
declare const _default: _backstage_backend_plugin_api.BackendFeature;
|
|
3
|
+
/** @alpha */
|
|
4
|
+
declare const _feature: _backstage_backend_plugin_api.BackendFeature;
|
|
8
5
|
|
|
9
|
-
export {
|
|
6
|
+
export { _feature as default };
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require('zod');
|
|
5
|
-
require('@backstage/backend-common');
|
|
6
|
-
require('@backstage/errors');
|
|
7
|
-
require('@backstage/plugin-permission-common');
|
|
8
|
-
require('lodash');
|
|
9
|
-
require('qs');
|
|
10
|
-
require('dataloader');
|
|
11
|
-
require('@backstage/backend-openapi-utils');
|
|
12
|
-
require('@backstage/backend-defaults/discovery');
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
13
4
|
|
|
5
|
+
var plugin = require('./plugin.cjs.js');
|
|
6
|
+
var router = require('./service/router.cjs.js');
|
|
14
7
|
|
|
15
8
|
|
|
9
|
+
|
|
10
|
+
exports.default = plugin.default;
|
|
16
11
|
exports.createRouter = router.createRouter;
|
|
17
12
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
2
|
+
import { DiscoveryService, LoggerService, AuthService, HttpAuthService } from '@backstage/backend-plugin-api';
|
|
1
3
|
import express from 'express';
|
|
2
4
|
import { Config } from '@backstage/config';
|
|
3
5
|
import { PermissionEvaluator, PermissionAuthorizer } from '@backstage/plugin-permission-common';
|
|
4
6
|
import { DocumentTypeInfo } from '@backstage/plugin-search-common';
|
|
5
7
|
import { SearchEngine } from '@backstage/plugin-search-backend-node';
|
|
6
|
-
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The Search plugin is responsible for starting search indexing processes and return search results.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
declare const _default: _backstage_backend_plugin_api.BackendFeature;
|
|
7
14
|
|
|
8
15
|
/**
|
|
9
16
|
* @public
|
|
@@ -25,4 +32,4 @@ type RouterOptions = {
|
|
|
25
32
|
*/
|
|
26
33
|
declare function createRouter(options: RouterOptions): Promise<express.Router>;
|
|
27
34
|
|
|
28
|
-
export { type RouterOptions, createRouter };
|
|
35
|
+
export { type RouterOptions, createRouter, _default as default };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
6
|
+
var pluginSearchBackendNode = require('@backstage/plugin-search-backend-node');
|
|
7
|
+
var alpha = require('@backstage/plugin-search-backend-node/alpha');
|
|
8
|
+
var router = require('./service/router.cjs.js');
|
|
9
|
+
|
|
10
|
+
class SearchIndexRegistry {
|
|
11
|
+
collators = [];
|
|
12
|
+
decorators = [];
|
|
13
|
+
addCollator(options) {
|
|
14
|
+
this.collators.push(options);
|
|
15
|
+
}
|
|
16
|
+
addDecorator(options) {
|
|
17
|
+
this.decorators.push(options);
|
|
18
|
+
}
|
|
19
|
+
getCollators() {
|
|
20
|
+
return this.collators;
|
|
21
|
+
}
|
|
22
|
+
getDecorators() {
|
|
23
|
+
return this.decorators;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class SearchEngineRegistry {
|
|
27
|
+
searchEngine = null;
|
|
28
|
+
setSearchEngine(searchEngine) {
|
|
29
|
+
if (this.searchEngine) {
|
|
30
|
+
throw new Error("Multiple Search engines is not supported at this time");
|
|
31
|
+
}
|
|
32
|
+
this.searchEngine = searchEngine;
|
|
33
|
+
}
|
|
34
|
+
getSearchEngine() {
|
|
35
|
+
return this.searchEngine;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
var feature = backendPluginApi.createBackendPlugin({
|
|
39
|
+
pluginId: "search",
|
|
40
|
+
register(env) {
|
|
41
|
+
const searchIndexRegistry = new SearchIndexRegistry();
|
|
42
|
+
env.registerExtensionPoint(
|
|
43
|
+
alpha.searchIndexRegistryExtensionPoint,
|
|
44
|
+
searchIndexRegistry
|
|
45
|
+
);
|
|
46
|
+
const searchEngineRegistry = new SearchEngineRegistry();
|
|
47
|
+
env.registerExtensionPoint(
|
|
48
|
+
alpha.searchEngineRegistryExtensionPoint,
|
|
49
|
+
searchEngineRegistry
|
|
50
|
+
);
|
|
51
|
+
env.registerInit({
|
|
52
|
+
deps: {
|
|
53
|
+
logger: backendPluginApi.coreServices.logger,
|
|
54
|
+
config: backendPluginApi.coreServices.rootConfig,
|
|
55
|
+
discovery: backendPluginApi.coreServices.discovery,
|
|
56
|
+
permissions: backendPluginApi.coreServices.permissions,
|
|
57
|
+
auth: backendPluginApi.coreServices.auth,
|
|
58
|
+
http: backendPluginApi.coreServices.httpRouter,
|
|
59
|
+
httpAuth: backendPluginApi.coreServices.httpAuth,
|
|
60
|
+
lifecycle: backendPluginApi.coreServices.rootLifecycle,
|
|
61
|
+
searchIndexService: alpha.searchIndexServiceRef
|
|
62
|
+
},
|
|
63
|
+
async init({
|
|
64
|
+
config,
|
|
65
|
+
logger,
|
|
66
|
+
discovery,
|
|
67
|
+
permissions,
|
|
68
|
+
auth,
|
|
69
|
+
http,
|
|
70
|
+
httpAuth,
|
|
71
|
+
lifecycle,
|
|
72
|
+
searchIndexService
|
|
73
|
+
}) {
|
|
74
|
+
let searchEngine = searchEngineRegistry.getSearchEngine();
|
|
75
|
+
if (!searchEngine) {
|
|
76
|
+
searchEngine = new pluginSearchBackendNode.LunrSearchEngine({
|
|
77
|
+
logger
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const collators = searchIndexRegistry.getCollators();
|
|
81
|
+
const decorators = searchIndexRegistry.getDecorators();
|
|
82
|
+
searchIndexService.init({
|
|
83
|
+
searchEngine,
|
|
84
|
+
collators,
|
|
85
|
+
decorators
|
|
86
|
+
});
|
|
87
|
+
lifecycle.addStartupHook(async () => {
|
|
88
|
+
await searchIndexService.start();
|
|
89
|
+
});
|
|
90
|
+
lifecycle.addShutdownHook(async () => {
|
|
91
|
+
await searchIndexService.stop();
|
|
92
|
+
});
|
|
93
|
+
const router$1 = await router.createRouter({
|
|
94
|
+
config,
|
|
95
|
+
discovery,
|
|
96
|
+
permissions,
|
|
97
|
+
auth,
|
|
98
|
+
httpAuth,
|
|
99
|
+
logger,
|
|
100
|
+
engine: searchEngine,
|
|
101
|
+
types: searchIndexService.getDocumentTypes()
|
|
102
|
+
});
|
|
103
|
+
http.use(router$1);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
exports.default = feature;
|
|
110
|
+
//# sourceMappingURL=plugin.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport {\n LunrSearchEngine,\n RegisterCollatorParameters,\n RegisterDecoratorParameters,\n SearchEngine,\n} from '@backstage/plugin-search-backend-node';\nimport {\n SearchEngineRegistryExtensionPoint,\n searchEngineRegistryExtensionPoint,\n searchIndexRegistryExtensionPoint,\n SearchIndexRegistryExtensionPoint,\n searchIndexServiceRef,\n} from '@backstage/plugin-search-backend-node/alpha';\n\nimport { createRouter } from './service/router';\n\nclass SearchIndexRegistry implements SearchIndexRegistryExtensionPoint {\n private collators: RegisterCollatorParameters[] = [];\n private decorators: RegisterDecoratorParameters[] = [];\n\n public addCollator(options: RegisterCollatorParameters): void {\n this.collators.push(options);\n }\n\n public addDecorator(options: RegisterDecoratorParameters): void {\n this.decorators.push(options);\n }\n\n public getCollators(): RegisterCollatorParameters[] {\n return this.collators;\n }\n\n public getDecorators(): RegisterDecoratorParameters[] {\n return this.decorators;\n }\n}\n\nclass SearchEngineRegistry implements SearchEngineRegistryExtensionPoint {\n private searchEngine: SearchEngine | null = null;\n\n public setSearchEngine(searchEngine: SearchEngine): void {\n if (this.searchEngine) {\n throw new Error('Multiple Search engines is not supported at this time');\n }\n this.searchEngine = searchEngine;\n }\n\n public getSearchEngine(): SearchEngine | null {\n return this.searchEngine;\n }\n}\n\n/**\n * The Search plugin is responsible for starting search indexing processes and return search results.\n * @public\n */\nexport default createBackendPlugin({\n pluginId: 'search',\n register(env) {\n const searchIndexRegistry = new SearchIndexRegistry();\n env.registerExtensionPoint(\n searchIndexRegistryExtensionPoint,\n searchIndexRegistry,\n );\n\n const searchEngineRegistry = new SearchEngineRegistry();\n env.registerExtensionPoint(\n searchEngineRegistryExtensionPoint,\n searchEngineRegistry,\n );\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n permissions: coreServices.permissions,\n auth: coreServices.auth,\n http: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n lifecycle: coreServices.rootLifecycle,\n searchIndexService: searchIndexServiceRef,\n },\n async init({\n config,\n logger,\n discovery,\n permissions,\n auth,\n http,\n httpAuth,\n lifecycle,\n searchIndexService,\n }) {\n let searchEngine = searchEngineRegistry.getSearchEngine();\n if (!searchEngine) {\n searchEngine = new LunrSearchEngine({\n logger,\n });\n }\n\n const collators = searchIndexRegistry.getCollators();\n const decorators = searchIndexRegistry.getDecorators();\n searchIndexService.init({\n searchEngine: searchEngine!,\n collators,\n decorators,\n });\n\n lifecycle.addStartupHook(async () => {\n await searchIndexService.start();\n });\n\n lifecycle.addShutdownHook(async () => {\n await searchIndexService.stop();\n });\n\n const router = await createRouter({\n config,\n discovery,\n permissions,\n auth,\n httpAuth,\n logger,\n engine: searchEngine,\n types: searchIndexService.getDocumentTypes(),\n });\n\n http.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","searchIndexRegistryExtensionPoint","searchEngineRegistryExtensionPoint","coreServices","searchIndexServiceRef","LunrSearchEngine","router","createRouter"],"mappings":";;;;;;;;;AAoCA,MAAM,mBAAiE,CAAA;AAAA,EAC7D,YAA0C,EAAC,CAAA;AAAA,EAC3C,aAA4C,EAAC,CAAA;AAAA,EAE9C,YAAY,OAA2C,EAAA;AAC5D,IAAK,IAAA,CAAA,SAAA,CAAU,KAAK,OAAO,CAAA,CAAA;AAAA,GAC7B;AAAA,EAEO,aAAa,OAA4C,EAAA;AAC9D,IAAK,IAAA,CAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEO,YAA6C,GAAA;AAClD,IAAA,OAAO,IAAK,CAAA,SAAA,CAAA;AAAA,GACd;AAAA,EAEO,aAA+C,GAAA;AACpD,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GACd;AACF,CAAA;AAEA,MAAM,oBAAmE,CAAA;AAAA,EAC/D,YAAoC,GAAA,IAAA,CAAA;AAAA,EAErC,gBAAgB,YAAkC,EAAA;AACvD,IAAA,IAAI,KAAK,YAAc,EAAA;AACrB,MAAM,MAAA,IAAI,MAAM,uDAAuD,CAAA,CAAA;AAAA,KACzE;AACA,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AAAA,GACtB;AAAA,EAEO,eAAuC,GAAA;AAC5C,IAAA,OAAO,IAAK,CAAA,YAAA,CAAA;AAAA,GACd;AACF,CAAA;AAMA,cAAeA,oCAAoB,CAAA;AAAA,EACjC,QAAU,EAAA,QAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAM,MAAA,mBAAA,GAAsB,IAAI,mBAAoB,EAAA,CAAA;AACpD,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,uCAAA;AAAA,MACA,mBAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,oBAAA,GAAuB,IAAI,oBAAqB,EAAA,CAAA;AACtD,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,wCAAA;AAAA,MACA,oBAAA;AAAA,KACF,CAAA;AAEA,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,QAAQC,6BAAa,CAAA,MAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,aAAaA,6BAAa,CAAA,WAAA;AAAA,QAC1B,MAAMA,6BAAa,CAAA,IAAA;AAAA,QACnB,MAAMA,6BAAa,CAAA,UAAA;AAAA,QACnB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,WAAWA,6BAAa,CAAA,aAAA;AAAA,QACxB,kBAAoB,EAAAC,2BAAA;AAAA,OACtB;AAAA,MACA,MAAM,IAAK,CAAA;AAAA,QACT,MAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,kBAAA;AAAA,OACC,EAAA;AACD,QAAI,IAAA,YAAA,GAAe,qBAAqB,eAAgB,EAAA,CAAA;AACxD,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAA,YAAA,GAAe,IAAIC,wCAAiB,CAAA;AAAA,YAClC,MAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAEA,QAAM,MAAA,SAAA,GAAY,oBAAoB,YAAa,EAAA,CAAA;AACnD,QAAM,MAAA,UAAA,GAAa,oBAAoB,aAAc,EAAA,CAAA;AACrD,QAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,UACtB,YAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,SACD,CAAA,CAAA;AAED,QAAA,SAAA,CAAU,eAAe,YAAY;AACnC,UAAA,MAAM,mBAAmB,KAAM,EAAA,CAAA;AAAA,SAChC,CAAA,CAAA;AAED,QAAA,SAAA,CAAU,gBAAgB,YAAY;AACpC,UAAA,MAAM,mBAAmB,IAAK,EAAA,CAAA;AAAA,SAC/B,CAAA,CAAA;AAED,QAAM,MAAAC,QAAA,GAAS,MAAMC,mBAAa,CAAA;AAAA,UAChC,MAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAQ,EAAA,YAAA;AAAA,UACR,KAAA,EAAO,mBAAmB,gBAAiB,EAAA;AAAA,SAC5C,CAAA,CAAA;AAED,QAAA,IAAA,CAAK,IAAID,QAAM,CAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var backendOpenapiUtils = require('@backstage/backend-openapi-utils');
|
|
4
|
+
|
|
5
|
+
const spec = {
|
|
6
|
+
openapi: "3.0.3",
|
|
7
|
+
info: {
|
|
8
|
+
title: "search",
|
|
9
|
+
version: "1",
|
|
10
|
+
description: "The Backstage backend plugin that provides search functionality.",
|
|
11
|
+
license: {
|
|
12
|
+
name: "Apache-2.0",
|
|
13
|
+
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
|
|
14
|
+
},
|
|
15
|
+
contact: {}
|
|
16
|
+
},
|
|
17
|
+
servers: [
|
|
18
|
+
{
|
|
19
|
+
url: "/"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
components: {
|
|
23
|
+
examples: {},
|
|
24
|
+
headers: {},
|
|
25
|
+
parameters: {},
|
|
26
|
+
requestBodies: {},
|
|
27
|
+
responses: {
|
|
28
|
+
ErrorResponse: {
|
|
29
|
+
description: "An error response from the backend.",
|
|
30
|
+
content: {
|
|
31
|
+
"application/json; charset=utf-8": {
|
|
32
|
+
schema: {
|
|
33
|
+
$ref: "#/components/schemas/Error"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
schemas: {
|
|
40
|
+
Error: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
error: {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {
|
|
46
|
+
name: {
|
|
47
|
+
type: "string"
|
|
48
|
+
},
|
|
49
|
+
message: {
|
|
50
|
+
type: "string"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
required: ["name", "message"]
|
|
54
|
+
},
|
|
55
|
+
request: {
|
|
56
|
+
type: "object",
|
|
57
|
+
properties: {
|
|
58
|
+
method: {
|
|
59
|
+
type: "string"
|
|
60
|
+
},
|
|
61
|
+
url: {
|
|
62
|
+
type: "string"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
required: ["method", "url"]
|
|
66
|
+
},
|
|
67
|
+
response: {
|
|
68
|
+
type: "object",
|
|
69
|
+
properties: {
|
|
70
|
+
statusCode: {
|
|
71
|
+
type: "number"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
required: ["statusCode"]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
required: ["error", "request", "response"]
|
|
78
|
+
},
|
|
79
|
+
JsonObject: {
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: {},
|
|
82
|
+
additionalProperties: {}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
securitySchemes: {
|
|
86
|
+
JWT: {
|
|
87
|
+
type: "http",
|
|
88
|
+
scheme: "bearer",
|
|
89
|
+
bearerFormat: "JWT"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
paths: {
|
|
94
|
+
"/query": {
|
|
95
|
+
get: {
|
|
96
|
+
operationId: "Query",
|
|
97
|
+
description: "Query documents with a given filter.",
|
|
98
|
+
responses: {
|
|
99
|
+
"200": {
|
|
100
|
+
description: "Ok",
|
|
101
|
+
content: {
|
|
102
|
+
"application/json": {
|
|
103
|
+
schema: {
|
|
104
|
+
type: "object",
|
|
105
|
+
properties: {
|
|
106
|
+
results: {
|
|
107
|
+
type: "array",
|
|
108
|
+
items: {
|
|
109
|
+
type: "object",
|
|
110
|
+
properties: {
|
|
111
|
+
type: {
|
|
112
|
+
type: "string",
|
|
113
|
+
description: 'The "type" of the given document.'
|
|
114
|
+
},
|
|
115
|
+
document: {
|
|
116
|
+
type: "object",
|
|
117
|
+
description: "The raw value of the document, as indexed.",
|
|
118
|
+
properties: {
|
|
119
|
+
title: {
|
|
120
|
+
type: "string",
|
|
121
|
+
description: "The primary name of the document (e.g. name, title, identifier, etc)."
|
|
122
|
+
},
|
|
123
|
+
text: {
|
|
124
|
+
type: "string",
|
|
125
|
+
description: "Free-form text of the document (e.g. description, content, etc)."
|
|
126
|
+
},
|
|
127
|
+
location: {
|
|
128
|
+
type: "string",
|
|
129
|
+
description: "The relative or absolute URL of the document (target when a search result is clicked)."
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
highlight: {
|
|
134
|
+
type: "object",
|
|
135
|
+
description: "Optional result highlight. Useful for improving the search result\ndisplay/experience."
|
|
136
|
+
},
|
|
137
|
+
rank: {
|
|
138
|
+
type: "integer",
|
|
139
|
+
description: "Optional result rank, where 1 is the first/top result returned. \nUseful for understanding search effectiveness in analytics."
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
required: ["type", "document"],
|
|
143
|
+
additionalProperties: false
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
nextPageCursor: {
|
|
147
|
+
type: "string"
|
|
148
|
+
},
|
|
149
|
+
previousPageCursor: {
|
|
150
|
+
type: "string"
|
|
151
|
+
},
|
|
152
|
+
numberOfResults: {
|
|
153
|
+
type: "integer"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
required: ["results"]
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
default: {
|
|
162
|
+
$ref: "#/components/responses/ErrorResponse"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
security: [
|
|
166
|
+
{},
|
|
167
|
+
{
|
|
168
|
+
JWT: []
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
parameters: [
|
|
172
|
+
{
|
|
173
|
+
name: "term",
|
|
174
|
+
in: "query",
|
|
175
|
+
required: false,
|
|
176
|
+
allowReserved: true,
|
|
177
|
+
schema: {
|
|
178
|
+
type: "string",
|
|
179
|
+
default: ""
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: "filters",
|
|
184
|
+
in: "query",
|
|
185
|
+
required: false,
|
|
186
|
+
style: "deepObject",
|
|
187
|
+
allowReserved: true,
|
|
188
|
+
schema: {
|
|
189
|
+
$ref: "#/components/schemas/JsonObject"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "types",
|
|
194
|
+
in: "query",
|
|
195
|
+
required: false,
|
|
196
|
+
allowReserved: true,
|
|
197
|
+
schema: {
|
|
198
|
+
type: "array",
|
|
199
|
+
items: {
|
|
200
|
+
type: "string"
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "pageCursor",
|
|
206
|
+
in: "query",
|
|
207
|
+
required: false,
|
|
208
|
+
allowReserved: true,
|
|
209
|
+
schema: {
|
|
210
|
+
type: "string"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "pageLimit",
|
|
215
|
+
in: "query",
|
|
216
|
+
required: false,
|
|
217
|
+
allowReserved: true,
|
|
218
|
+
schema: {
|
|
219
|
+
type: "integer"
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: "unknown",
|
|
224
|
+
in: "query",
|
|
225
|
+
required: false,
|
|
226
|
+
style: "form",
|
|
227
|
+
explode: true,
|
|
228
|
+
allowReserved: true,
|
|
229
|
+
schema: {
|
|
230
|
+
type: "object",
|
|
231
|
+
additionalProperties: true
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const createOpenApiRouter = async (options) => backendOpenapiUtils.createValidatedOpenApiRouter(spec, options);
|
|
240
|
+
|
|
241
|
+
exports.createOpenApiRouter = createOpenApiRouter;
|
|
242
|
+
exports.spec = spec;
|
|
243
|
+
//# sourceMappingURL=openapi.generated.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.generated.cjs.js","sources":["../../src/schema/openapi.generated.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils';\n\nexport const spec = {\n openapi: '3.0.3',\n info: {\n title: 'search',\n version: '1',\n description:\n 'The Backstage backend plugin that provides search functionality.',\n license: {\n name: 'Apache-2.0',\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html',\n },\n contact: {},\n },\n servers: [\n {\n url: '/',\n },\n ],\n components: {\n examples: {},\n headers: {},\n parameters: {},\n requestBodies: {},\n responses: {\n ErrorResponse: {\n description: 'An error response from the backend.',\n content: {\n 'application/json; charset=utf-8': {\n schema: {\n $ref: '#/components/schemas/Error',\n },\n },\n },\n },\n },\n schemas: {\n Error: {\n type: 'object',\n properties: {\n error: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n },\n request: {\n type: 'object',\n properties: {\n method: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n },\n required: ['method', 'url'],\n },\n response: {\n type: 'object',\n properties: {\n statusCode: {\n type: 'number',\n },\n },\n required: ['statusCode'],\n },\n },\n required: ['error', 'request', 'response'],\n },\n JsonObject: {\n type: 'object',\n properties: {},\n additionalProperties: {},\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n paths: {\n '/query': {\n get: {\n operationId: 'Query',\n description: 'Query documents with a given filter.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n results: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The \"type\" of the given document.',\n },\n document: {\n type: 'object',\n description:\n 'The raw value of the document, as indexed.',\n properties: {\n title: {\n type: 'string',\n description:\n 'The primary name of the document (e.g. name, title, identifier, etc).',\n },\n text: {\n type: 'string',\n description:\n 'Free-form text of the document (e.g. description, content, etc).',\n },\n location: {\n type: 'string',\n description:\n 'The relative or absolute URL of the document (target when a search result is clicked).',\n },\n },\n },\n highlight: {\n type: 'object',\n description:\n 'Optional result highlight. Useful for improving the search result\\ndisplay/experience.',\n },\n rank: {\n type: 'integer',\n description:\n 'Optional result rank, where 1 is the first/top result returned. \\nUseful for understanding search effectiveness in analytics.',\n },\n },\n required: ['type', 'document'],\n additionalProperties: false,\n },\n },\n nextPageCursor: {\n type: 'string',\n },\n previousPageCursor: {\n type: 'string',\n },\n numberOfResults: {\n type: 'integer',\n },\n },\n required: ['results'],\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n name: 'term',\n in: 'query',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n default: '',\n },\n },\n {\n name: 'filters',\n in: 'query',\n required: false,\n style: 'deepObject',\n allowReserved: true,\n schema: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n {\n name: 'types',\n in: 'query',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n {\n name: 'pageCursor',\n in: 'query',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n name: 'pageLimit',\n in: 'query',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n },\n },\n {\n name: 'unknown',\n in: 'query',\n required: false,\n style: 'form',\n explode: true,\n allowReserved: true,\n schema: {\n type: 'object',\n additionalProperties: true,\n },\n },\n ],\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<typeof createValidatedOpenApiRouter>['1'],\n) => createValidatedOpenApiRouter<typeof spec>(spec, options);\n"],"names":["createValidatedOpenApiRouter"],"mappings":"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"}
|