@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-search-backend__alpha",
3
- "version": "1.5.18-next.1",
3
+ "version": "1.6.0",
4
4
  "main": "../dist/alpha.cjs.js",
5
5
  "types": "../dist/alpha.d.ts"
6
6
  }
package/dist/alpha.cjs.js CHANGED
@@ -2,118 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var backendPluginApi = require('@backstage/backend-plugin-api');
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
- class SearchIndexRegistry {
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 = alpha;
9
+ exports.default = _feature;
119
10
  //# sourceMappingURL=alpha.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.cjs.js","sources":["../src/alpha.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 * @alpha\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,YAAeA,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,yCAAA;AAAA,MACA,mBAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,oBAAA,GAAuB,IAAI,oBAAqB,EAAA,CAAA;AACtD,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,0CAAA;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,6BAAA;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;;;;"}
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
- * The Search plugin is responsible for starting search indexing processes and return search results.
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 { _default as default };
6
+ export { _feature as default };
package/dist/index.cjs.js CHANGED
@@ -1,17 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var router = require('./cjs/router-Ci5jjVmK.cjs.js');
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
@@ -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
- import { DiscoveryService, LoggerService, AuthService, HttpAuthService } from '@backstage/backend-plugin-api';
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":"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"}
@@ -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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"}