@backstage/backend-dynamic-feature-service 0.0.0-nightly-20240116021644
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 +452 -0
- package/README.md +48 -0
- package/dist/index.cjs.js +531 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +199 -0
- package/package.json +62 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { BackstagePackageJson, PackageRole, PackagePlatform } from '@backstage/cli-node';
|
|
2
|
+
import { Logger } from 'winston';
|
|
3
|
+
import { Config } from '@backstage/config';
|
|
4
|
+
import { PluginCacheManager, PluginDatabaseManager, UrlReader, PluginEndpointDiscovery, TokenManager } from '@backstage/backend-common';
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
|
|
7
|
+
import { IdentityApi } from '@backstage/plugin-auth-node';
|
|
8
|
+
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
|
|
9
|
+
import { EventBroker, HttpPostIngressOptions } from '@backstage/plugin-events-node';
|
|
10
|
+
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
11
|
+
import { BackendFeature, LoggerService } from '@backstage/backend-plugin-api';
|
|
12
|
+
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
|
|
13
|
+
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
|
|
14
|
+
import { IndexBuilder } from '@backstage/plugin-search-backend-node';
|
|
15
|
+
import { EventsBackend } from '@backstage/plugin-events-backend';
|
|
16
|
+
import { PermissionPolicy } from '@backstage/plugin-permission-node';
|
|
17
|
+
import { FeatureDiscoveryService } from '@backstage/backend-plugin-api/alpha';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
interface ModuleLoader {
|
|
23
|
+
bootstrap(backstageRoot: string, dynamicPluginPaths: string[]): Promise<void>;
|
|
24
|
+
load(id: string): Promise<any>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
interface ScannedPluginPackage {
|
|
31
|
+
location: URL;
|
|
32
|
+
manifest: ScannedPluginManifest;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
type ScannedPluginManifest = BackstagePackageJson & Required<Pick<BackstagePackageJson, 'main'>> & Required<Pick<BackstagePackageJson, 'backstage'>> & {
|
|
38
|
+
backstage: Required<BackstagePackageJson['backstage']>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @public
|
|
43
|
+
*
|
|
44
|
+
* @deprecated
|
|
45
|
+
*
|
|
46
|
+
* Support for the legacy backend system will be removed in the future.
|
|
47
|
+
*
|
|
48
|
+
* When adding a legacy plugin installer entrypoint in your plugin,
|
|
49
|
+
* you should always take the opportunity to also implement support
|
|
50
|
+
* for the new backend system if not already done.
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
type LegacyPluginEnvironment = {
|
|
54
|
+
logger: Logger;
|
|
55
|
+
cache: PluginCacheManager;
|
|
56
|
+
database: PluginDatabaseManager;
|
|
57
|
+
config: Config;
|
|
58
|
+
reader: UrlReader;
|
|
59
|
+
discovery: PluginEndpointDiscovery;
|
|
60
|
+
tokenManager: TokenManager;
|
|
61
|
+
permissions: PermissionEvaluator;
|
|
62
|
+
scheduler: PluginTaskScheduler;
|
|
63
|
+
identity: IdentityApi;
|
|
64
|
+
eventBroker: EventBroker;
|
|
65
|
+
pluginProvider: BackendPluginProvider;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
interface DynamicPluginProvider extends FrontendPluginProvider, BackendPluginProvider {
|
|
71
|
+
plugins(): DynamicPlugin[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
interface BackendPluginProvider {
|
|
77
|
+
backendPlugins(): BackendDynamicPlugin[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @public
|
|
81
|
+
*/
|
|
82
|
+
interface FrontendPluginProvider {
|
|
83
|
+
frontendPlugins(): FrontendDynamicPlugin[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @public
|
|
87
|
+
*/
|
|
88
|
+
interface BaseDynamicPlugin {
|
|
89
|
+
name: string;
|
|
90
|
+
version: string;
|
|
91
|
+
role: PackageRole;
|
|
92
|
+
platform: PackagePlatform;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @public
|
|
96
|
+
*/
|
|
97
|
+
type DynamicPlugin = FrontendDynamicPlugin | BackendDynamicPlugin;
|
|
98
|
+
/**
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
interface FrontendDynamicPlugin extends BaseDynamicPlugin {
|
|
102
|
+
platform: 'web';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* @public
|
|
106
|
+
*/
|
|
107
|
+
interface BackendDynamicPlugin extends BaseDynamicPlugin {
|
|
108
|
+
platform: 'node';
|
|
109
|
+
installer: BackendDynamicPluginInstaller;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* @public
|
|
113
|
+
*/
|
|
114
|
+
type BackendDynamicPluginInstaller = LegacyBackendPluginInstaller | NewBackendPluginInstaller;
|
|
115
|
+
/**
|
|
116
|
+
* @public
|
|
117
|
+
*/
|
|
118
|
+
interface NewBackendPluginInstaller {
|
|
119
|
+
kind: 'new';
|
|
120
|
+
install(): BackendFeature | BackendFeature[];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* @public
|
|
124
|
+
* @deprecated
|
|
125
|
+
*
|
|
126
|
+
* Support for the legacy backend system will be removed in the future.
|
|
127
|
+
*
|
|
128
|
+
* When adding a legacy plugin installer entrypoint in your plugin,
|
|
129
|
+
* you should always take the opportunity to also implement support
|
|
130
|
+
* for the new backend system if not already done.
|
|
131
|
+
*
|
|
132
|
+
*/
|
|
133
|
+
interface LegacyBackendPluginInstaller {
|
|
134
|
+
kind: 'legacy';
|
|
135
|
+
router?: {
|
|
136
|
+
pluginID: string;
|
|
137
|
+
createPlugin(env: LegacyPluginEnvironment): Promise<Router>;
|
|
138
|
+
};
|
|
139
|
+
catalog?(builder: CatalogBuilder, env: LegacyPluginEnvironment): void;
|
|
140
|
+
scaffolder?(env: LegacyPluginEnvironment): TemplateAction<any>[];
|
|
141
|
+
search?(indexBuilder: IndexBuilder, schedule: TaskRunner, env: LegacyPluginEnvironment): void;
|
|
142
|
+
events?(eventsBackend: EventsBackend, env: LegacyPluginEnvironment): HttpPostIngressOptions[];
|
|
143
|
+
permissions?: {
|
|
144
|
+
policy?: PermissionPolicy;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @public
|
|
149
|
+
*/
|
|
150
|
+
declare function isBackendDynamicPluginInstaller(obj: any): obj is BackendDynamicPluginInstaller;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @public
|
|
154
|
+
*/
|
|
155
|
+
interface DynamicPluginManagerOptions {
|
|
156
|
+
config: Config;
|
|
157
|
+
logger: LoggerService;
|
|
158
|
+
preferAlpha?: boolean;
|
|
159
|
+
moduleLoader?: ModuleLoader;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @public
|
|
163
|
+
*/
|
|
164
|
+
declare class DynamicPluginManager implements DynamicPluginProvider {
|
|
165
|
+
private readonly logger;
|
|
166
|
+
private packages;
|
|
167
|
+
private readonly moduleLoader;
|
|
168
|
+
static create(options: DynamicPluginManagerOptions): Promise<DynamicPluginManager>;
|
|
169
|
+
private readonly _plugins;
|
|
170
|
+
private _availablePackages;
|
|
171
|
+
private constructor();
|
|
172
|
+
get availablePackages(): ScannedPluginPackage[];
|
|
173
|
+
addBackendPlugin(plugin: BackendDynamicPlugin): void;
|
|
174
|
+
private loadPlugins;
|
|
175
|
+
private loadBackendPlugin;
|
|
176
|
+
backendPlugins(): BackendDynamicPlugin[];
|
|
177
|
+
frontendPlugins(): FrontendDynamicPlugin[];
|
|
178
|
+
plugins(): DynamicPlugin[];
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* @public
|
|
182
|
+
*/
|
|
183
|
+
declare const dynamicPluginsServiceRef: _backstage_backend_plugin_api.ServiceRef<DynamicPluginProvider, "root">;
|
|
184
|
+
/**
|
|
185
|
+
* @public
|
|
186
|
+
*/
|
|
187
|
+
interface DynamicPluginsFactoryOptions {
|
|
188
|
+
moduleLoader?(logger: LoggerService): ModuleLoader;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @public
|
|
192
|
+
*/
|
|
193
|
+
declare const dynamicPluginsServiceFactory: (options?: DynamicPluginsFactoryOptions | undefined) => _backstage_backend_plugin_api.ServiceFactory<DynamicPluginProvider, "root">;
|
|
194
|
+
/**
|
|
195
|
+
* @public
|
|
196
|
+
*/
|
|
197
|
+
declare const dynamicPluginsFeatureDiscoveryServiceFactory: () => _backstage_backend_plugin_api.ServiceFactory<FeatureDiscoveryService, "root">;
|
|
198
|
+
|
|
199
|
+
export { BackendDynamicPlugin, BackendDynamicPluginInstaller, BackendPluginProvider, BaseDynamicPlugin, DynamicPlugin, DynamicPluginManager, DynamicPluginManagerOptions, DynamicPluginProvider, DynamicPluginsFactoryOptions, FrontendDynamicPlugin, FrontendPluginProvider, LegacyBackendPluginInstaller, LegacyPluginEnvironment, ModuleLoader, NewBackendPluginInstaller, ScannedPluginManifest, ScannedPluginPackage, dynamicPluginsFeatureDiscoveryServiceFactory, dynamicPluginsServiceFactory, dynamicPluginsServiceRef, isBackendDynamicPluginInstaller };
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@backstage/backend-dynamic-feature-service",
|
|
3
|
+
"description": "Backstage dynamic feature service",
|
|
4
|
+
"version": "0.0.0-nightly-20240116021644",
|
|
5
|
+
"main": "dist/index.cjs.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public",
|
|
9
|
+
"main": "dist/index.cjs.js",
|
|
10
|
+
"types": "dist/index.d.ts"
|
|
11
|
+
},
|
|
12
|
+
"backstage": {
|
|
13
|
+
"role": "node-library"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"backstage"
|
|
17
|
+
],
|
|
18
|
+
"license": "Apache-2.0",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "backstage-cli package build",
|
|
21
|
+
"lint": "backstage-cli package lint",
|
|
22
|
+
"test": "backstage-cli package test",
|
|
23
|
+
"prepack": "backstage-cli package prepack",
|
|
24
|
+
"postpack": "backstage-cli package postpack",
|
|
25
|
+
"clean": "backstage-cli package clean",
|
|
26
|
+
"start": "backstage-cli package start"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@backstage/backend-common": "^0.0.0-nightly-20240116021644",
|
|
30
|
+
"@backstage/backend-plugin-api": "^0.0.0-nightly-20240116021644",
|
|
31
|
+
"@backstage/backend-tasks": "^0.0.0-nightly-20240116021644",
|
|
32
|
+
"@backstage/cli-common": "^0.1.13",
|
|
33
|
+
"@backstage/cli-node": "^0.0.0-nightly-20240116021644",
|
|
34
|
+
"@backstage/config": "^1.1.1",
|
|
35
|
+
"@backstage/errors": "^1.2.3",
|
|
36
|
+
"@backstage/plugin-auth-node": "^0.0.0-nightly-20240116021644",
|
|
37
|
+
"@backstage/plugin-catalog-backend": "^0.0.0-nightly-20240116021644",
|
|
38
|
+
"@backstage/plugin-events-backend": "^0.0.0-nightly-20240116021644",
|
|
39
|
+
"@backstage/plugin-events-node": "^0.0.0-nightly-20240116021644",
|
|
40
|
+
"@backstage/plugin-permission-common": "^0.0.0-nightly-20240116021644",
|
|
41
|
+
"@backstage/plugin-permission-node": "^0.0.0-nightly-20240116021644",
|
|
42
|
+
"@backstage/plugin-scaffolder-node": "^0.0.0-nightly-20240116021644",
|
|
43
|
+
"@backstage/plugin-search-backend-node": "^0.0.0-nightly-20240116021644",
|
|
44
|
+
"@backstage/plugin-search-common": "^0.0.0-nightly-20240116021644",
|
|
45
|
+
"@backstage/types": "^1.1.1",
|
|
46
|
+
"@types/express": "^4.17.6",
|
|
47
|
+
"chokidar": "^3.5.3",
|
|
48
|
+
"express": "^4.17.1",
|
|
49
|
+
"lodash": "^4.17.21",
|
|
50
|
+
"winston": "^3.2.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@backstage/backend-app-api": "^0.0.0-nightly-20240116021644",
|
|
54
|
+
"@backstage/backend-test-utils": "^0.0.0-nightly-20240116021644",
|
|
55
|
+
"@backstage/cli": "^0.0.0-nightly-20240116021644",
|
|
56
|
+
"@backstage/config-loader": "^0.0.0-nightly-20240116021644",
|
|
57
|
+
"wait-for-expect": "^3.0.2"
|
|
58
|
+
},
|
|
59
|
+
"files": [
|
|
60
|
+
"dist"
|
|
61
|
+
]
|
|
62
|
+
}
|