@backstage/plugin-scaffolder-backend 1.30.1-next.1 → 1.31.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,84 @@
1
1
  # @backstage/plugin-scaffolder-backend
2
2
 
3
+ ## 1.31.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 36677bb: Support new `createTemplateAction` type, and convert `catalog:fetch` action to new way of defining actions.
8
+ - 2b1e50d: use CreatedTemplate[Filter|Global*] as canonical template extensions in scaffolder plugin
9
+
10
+ ### Patch Changes
11
+
12
+ - e0b226b: build(deps): bump `esbuild` from 0.24.2 to 0.25.0
13
+ - 09cf038: Got rid of most `@backstage/backend-common` usages
14
+ - 4f8b5b6: Allow signing git commits using configured private PGP key in scaffolder
15
+ - 59dcf37: Fixed bug in fs:delete causing no files to be deleted on windows machines
16
+ - Updated dependencies
17
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1
18
+ - @backstage/integration@1.16.2
19
+ - @backstage/backend-defaults@0.8.2
20
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.7
21
+ - @backstage/plugin-scaffolder-backend-module-github@0.6.1
22
+ - @backstage/plugin-scaffolder-node@0.8.0
23
+ - @backstage/plugin-permission-node@0.9.0
24
+ - @backstage/plugin-auth-node@0.6.1
25
+ - @backstage/plugin-scaffolder-common@1.5.10
26
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.7
27
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.8
28
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.7
29
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.7
30
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.7
31
+ - @backstage/plugin-events-node@0.4.9
32
+ - @backstage/backend-plugin-api@1.2.1
33
+ - @backstage/catalog-client@1.9.1
34
+ - @backstage/catalog-model@1.7.3
35
+ - @backstage/config@1.3.2
36
+ - @backstage/errors@1.2.7
37
+ - @backstage/types@1.2.1
38
+ - @backstage/plugin-bitbucket-cloud-common@0.2.28
39
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6
40
+ - @backstage/plugin-catalog-node@1.16.1
41
+ - @backstage/plugin-permission-common@0.8.4
42
+
43
+ ## 1.31.0-next.2
44
+
45
+ ### Minor Changes
46
+
47
+ - 36677bb: Support new `createTemplateAction` type, and convert `catalog:fetch` action to new way of defining actions.
48
+ - 2b1e50d: use CreatedTemplate[Filter|Global*] as canonical template extensions in scaffolder plugin
49
+
50
+ ### Patch Changes
51
+
52
+ - e0b226b: build(deps): bump `esbuild` from 0.24.2 to 0.25.0
53
+ - 4f8b5b6: Allow signing git commits using configured private PGP key in scaffolder
54
+ - 59dcf37: Fixed bug in fs:delete causing no files to be deleted on windows machines
55
+ - Updated dependencies
56
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1-next.2
57
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.7-next.2
58
+ - @backstage/plugin-scaffolder-node@0.8.0-next.2
59
+ - @backstage/plugin-scaffolder-backend-module-github@0.6.1-next.2
60
+ - @backstage/backend-defaults@0.8.2-next.2
61
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.7-next.2
62
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.8-next.2
63
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.7-next.2
64
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.7-next.2
65
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.7-next.2
66
+ - @backstage/integration@1.16.2-next.0
67
+ - @backstage/plugin-events-node@0.4.9-next.2
68
+ - @backstage/backend-plugin-api@1.2.1-next.1
69
+ - @backstage/catalog-client@1.9.1
70
+ - @backstage/catalog-model@1.7.3
71
+ - @backstage/config@1.3.2
72
+ - @backstage/errors@1.2.7
73
+ - @backstage/types@1.2.1
74
+ - @backstage/plugin-auth-node@0.6.1-next.1
75
+ - @backstage/plugin-bitbucket-cloud-common@0.2.28-next.0
76
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.1
77
+ - @backstage/plugin-catalog-node@1.16.1-next.1
78
+ - @backstage/plugin-permission-common@0.8.4
79
+ - @backstage/plugin-permission-node@0.8.9-next.1
80
+ - @backstage/plugin-scaffolder-common@1.5.10-next.0
81
+
3
82
  ## 1.30.1-next.1
4
83
 
5
84
  ### Patch Changes
package/config.d.ts CHANGED
@@ -27,6 +27,11 @@ export interface Config {
27
27
  email?: string;
28
28
  };
29
29
 
30
+ /**
31
+ * Default PGP signing key for signing commits.
32
+ * @visibility secret
33
+ */
34
+ defaultCommitSigningKey?: string;
30
35
  /**
31
36
  * The commit message used when new components are created.
32
37
  */
@@ -37,6 +37,7 @@ require('./scaffolder/tasks/NunjucksWorkflowRunner.cjs.js');
37
37
  require('timers/promises');
38
38
  var router = require('./service/router.cjs.js');
39
39
  var loggerToWinstonLogger = require('./util/loggerToWinstonLogger.cjs.js');
40
+ var templating = require('./util/templating.cjs.js');
40
41
 
41
42
  const scaffolderPlugin = backendPluginApi.createBackendPlugin({
42
43
  pluginId: "scaffolder",
@@ -56,26 +57,24 @@ const scaffolderPlugin = backendPluginApi.createBackendPlugin({
56
57
  taskBroker = newTaskBroker;
57
58
  }
58
59
  });
59
- const additionalTemplateFilters = {};
60
- const additionalTemplateGlobals = {};
60
+ const additionalTemplateFilters = [];
61
+ const additionalTemplateGlobals = [];
61
62
  env.registerExtensionPoint(alpha.scaffolderTemplatingExtensionPoint, {
62
63
  addTemplateFilters(newFilters) {
63
- Object.assign(
64
- additionalTemplateFilters,
65
- Array.isArray(newFilters) ? Object.fromEntries(
66
- newFilters.map((tf) => [tf.id, tf.filter])
67
- ) : newFilters
64
+ additionalTemplateFilters.push(
65
+ ...Array.isArray(newFilters) ? newFilters : Object.entries(newFilters).map(
66
+ ([id, filter]) => alpha.createTemplateFilter({
67
+ id,
68
+ filter
69
+ })
70
+ )
68
71
  );
69
72
  },
70
73
  addTemplateGlobals(newGlobals) {
71
- Object.assign(
72
- additionalTemplateGlobals,
73
- Array.isArray(newGlobals) ? Object.fromEntries(
74
- newGlobals.map((g) => [
75
- g.id,
76
- "value" in g ? g.value : g.fn
77
- ])
78
- ) : newGlobals
74
+ additionalTemplateGlobals.push(
75
+ ...Array.isArray(newGlobals) ? newGlobals : Object.entries(newGlobals).map(
76
+ ([id, global]) => typeof global === "function" ? alpha.createTemplateGlobalFunction({ id, fn: global }) : alpha.createTemplateGlobalValue({ id, value: global })
77
+ )
79
78
  );
80
79
  }
81
80
  });
@@ -124,6 +123,14 @@ const scaffolderPlugin = backendPluginApi.createBackendPlugin({
124
123
  }) {
125
124
  const log$1 = loggerToWinstonLogger.loggerToWinstonLogger(logger);
126
125
  const integrations = integration.ScmIntegrations.fromConfig(config);
126
+ const templateExtensions = {
127
+ additionalTemplateFilters: templating.convertFiltersToRecord(
128
+ additionalTemplateFilters
129
+ ),
130
+ additionalTemplateGlobals: templating.convertGlobalsToRecord(
131
+ additionalTemplateGlobals
132
+ )
133
+ };
127
134
  const actions = [
128
135
  // actions provided from other modules
129
136
  ...addedActions,
@@ -139,14 +146,12 @@ const scaffolderPlugin = backendPluginApi.createBackendPlugin({
139
146
  template.createFetchTemplateAction({
140
147
  integrations,
141
148
  reader,
142
- additionalTemplateFilters,
143
- additionalTemplateGlobals
149
+ ...templateExtensions
144
150
  }),
145
151
  templateFile.createFetchTemplateFileAction({
146
152
  integrations,
147
153
  reader,
148
- additionalTemplateFilters,
149
- additionalTemplateGlobals
154
+ ...templateExtensions
150
155
  }),
151
156
  log.createDebugLogAction(),
152
157
  wait.createWaitAction(),
@@ -1 +1 @@
1
- {"version":3,"file":"ScaffolderPlugin.cjs.js","sources":["../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 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 { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\nimport {\n TaskBroker,\n TemplateAction,\n TemplateFilter,\n TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport {\n AutocompleteHandler,\n scaffolderActionsExtensionPoint,\n scaffolderAutocompleteExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n scaffolderWorkspaceProviderExtensionPoint,\n WorkspaceProvider,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFetchTemplateFileAction,\n createFilesystemDeleteAction,\n createFilesystemReadDirAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\nimport { loggerToWinstonLogger } from './util/loggerToWinstonLogger';\n\n/**\n * Scaffolder plugin\n *\n * @public\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: Record<string, TemplateFilter> = {};\n const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n Object.assign(\n additionalTemplateFilters,\n Array.isArray(newFilters)\n ? Object.fromEntries(\n newFilters.map(tf => [tf.id, tf.filter as TemplateFilter]),\n )\n : newFilters,\n );\n },\n addTemplateGlobals(newGlobals) {\n Object.assign(\n additionalTemplateGlobals,\n Array.isArray(newGlobals)\n ? Object.fromEntries(\n newGlobals.map(g => [\n g.id,\n ('value' in g ? g.value : g.fn) as TemplateGlobal,\n ]),\n )\n : newGlobals,\n );\n },\n });\n\n const autocompleteHandlers: Record<string, AutocompleteHandler> = {};\n env.registerExtensionPoint(scaffolderAutocompleteExtensionPoint, {\n addAutocompleteProvider(provider) {\n autocompleteHandlers[provider.id] = provider.handler;\n },\n });\n\n const additionalWorkspaceProviders: Record<string, WorkspaceProvider> = {};\n env.registerExtensionPoint(scaffolderWorkspaceProviderExtensionPoint, {\n addProviders(provider) {\n Object.assign(additionalWorkspaceProviders, provider);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n auditor: coreServices.auditor,\n catalogClient: catalogServiceRef,\n events: eventsServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n events,\n auditor,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createFetchTemplateFileAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n createFilesystemReadDirAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n autocompleteHandlers,\n additionalWorkspaceProviders,\n events,\n auditor,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","scaffolderAutocompleteExtensionPoint","scaffolderWorkspaceProviderExtensionPoint","coreServices","catalogServiceRef","eventsServiceRef","log","loggerToWinstonLogger","ScmIntegrations","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createFetchTemplateFileAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","createFilesystemReadDirAction","router","createRouter"],"mappings":"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"}
1
+ {"version":3,"file":"ScaffolderPlugin.cjs.js","sources":["../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 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 { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\nimport { TaskBroker, TemplateAction } from '@backstage/plugin-scaffolder-node';\nimport {\n AutocompleteHandler,\n CreatedTemplateFilter,\n CreatedTemplateGlobal,\n createTemplateFilter,\n createTemplateGlobalFunction,\n createTemplateGlobalValue,\n scaffolderActionsExtensionPoint,\n scaffolderAutocompleteExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n scaffolderWorkspaceProviderExtensionPoint,\n WorkspaceProvider,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFetchTemplateFileAction,\n createFilesystemDeleteAction,\n createFilesystemReadDirAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\nimport { loggerToWinstonLogger } from './util/loggerToWinstonLogger';\nimport {\n convertFiltersToRecord,\n convertGlobalsToRecord,\n} from './util/templating';\n\n/**\n * Scaffolder plugin\n *\n * @public\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: CreatedTemplateFilter[] = [];\n const additionalTemplateGlobals: CreatedTemplateGlobal[] = [];\n\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n additionalTemplateFilters.push(\n ...(Array.isArray(newFilters)\n ? newFilters\n : Object.entries(newFilters).map(([id, filter]) =>\n createTemplateFilter({\n id,\n filter,\n }),\n )),\n );\n },\n addTemplateGlobals(newGlobals) {\n additionalTemplateGlobals.push(\n ...(Array.isArray(newGlobals)\n ? newGlobals\n : Object.entries(newGlobals).map(([id, global]) =>\n typeof global === 'function'\n ? createTemplateGlobalFunction({ id, fn: global })\n : createTemplateGlobalValue({ id, value: global }),\n )),\n );\n },\n });\n\n const autocompleteHandlers: Record<string, AutocompleteHandler> = {};\n env.registerExtensionPoint(scaffolderAutocompleteExtensionPoint, {\n addAutocompleteProvider(provider) {\n autocompleteHandlers[provider.id] = provider.handler;\n },\n });\n\n const additionalWorkspaceProviders: Record<string, WorkspaceProvider> = {};\n env.registerExtensionPoint(scaffolderWorkspaceProviderExtensionPoint, {\n addProviders(provider) {\n Object.assign(additionalWorkspaceProviders, provider);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n auditor: coreServices.auditor,\n catalogClient: catalogServiceRef,\n events: eventsServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n events,\n auditor,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const templateExtensions = {\n additionalTemplateFilters: convertFiltersToRecord(\n additionalTemplateFilters,\n ),\n additionalTemplateGlobals: convertGlobalsToRecord(\n additionalTemplateGlobals,\n ),\n };\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n ...templateExtensions,\n }),\n createFetchTemplateFileAction({\n integrations,\n reader,\n ...templateExtensions,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n createFilesystemReadDirAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n autocompleteHandlers,\n additionalWorkspaceProviders,\n events,\n auditor,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","createTemplateFilter","createTemplateGlobalFunction","createTemplateGlobalValue","scaffolderAutocompleteExtensionPoint","scaffolderWorkspaceProviderExtensionPoint","coreServices","catalogServiceRef","eventsServiceRef","log","loggerToWinstonLogger","ScmIntegrations","convertFiltersToRecord","convertGlobalsToRecord","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createFetchTemplateFileAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","createFilesystemReadDirAction","router","createRouter"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- /// <reference types="node" />
2
1
  import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
3
2
  import { AuthService, UrlReaderService, DatabaseService, BackstageCredentials, AuditorService, LifecycleService, SchedulerService, PermissionsService, HttpAuthService, DiscoveryService } from '@backstage/backend-plugin-api';
4
3
  import * as _backstage_plugin_scaffolder_node from '@backstage/plugin-scaffolder-node';
5
- import { TemplateFilter as TemplateFilter$1, TemplateGlobal as TemplateGlobal$1, TemplateAction as TemplateAction$1, TaskStatus as TaskStatus$1, TaskCompletionState as TaskCompletionState$1, SerializedTask as SerializedTask$1, TaskEventType as TaskEventType$1, SerializedTaskEvent as SerializedTaskEvent$1, TaskBrokerDispatchResult as TaskBrokerDispatchResult$1, TaskBrokerDispatchOptions as TaskBrokerDispatchOptions$1, TaskContext as TaskContext$1, TaskBroker as TaskBroker$1, TaskSecrets as TaskSecrets$1, ActionContext as ActionContext$1, ExecuteShellCommandOptions, executeShellCommand as executeShellCommand$1, fetchContents as fetchContents$1 } from '@backstage/plugin-scaffolder-node';
4
+ import { TemplateFilter as TemplateFilter$1, TemplateGlobal as TemplateGlobal$1, TemplateAction as TemplateAction$1, TaskStatus as TaskStatus$1, TaskCompletionState as TaskCompletionState$1, SerializedTask as SerializedTask$1, TaskEventType as TaskEventType$1, SerializedTaskEvent as SerializedTaskEvent$1, TaskBrokerDispatchResult as TaskBrokerDispatchResult$1, TaskBrokerDispatchOptions as TaskBrokerDispatchOptions$1, TaskContext as TaskContext$1, TaskBroker as TaskBroker$1, TaskSecrets as TaskSecrets$1, ActionContext as ActionContext$1, createTemplateAction as createTemplateAction$1, ExecuteShellCommandOptions, executeShellCommand as executeShellCommand$1, fetchContents as fetchContents$1 } from '@backstage/plugin-scaffolder-node';
6
5
  import * as _backstage_types from '@backstage/types';
7
6
  import { HumanDuration, JsonObject, JsonValue } from '@backstage/types';
8
7
  import * as _backstage_integration from '@backstage/integration';
@@ -28,8 +27,6 @@ import { IdentityApi } from '@backstage/plugin-auth-node';
28
27
  import { PermissionRule } from '@backstage/plugin-permission-node';
29
28
  import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, RESOURCE_TYPE_SCAFFOLDER_ACTION } from '@backstage/plugin-scaffolder-common/alpha';
30
29
  import express from 'express';
31
- import * as jsonschema from 'jsonschema';
32
- import * as zod from 'zod';
33
30
  import { ScaffolderEntitiesProcessor as ScaffolderEntitiesProcessor$1 } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model';
34
31
 
35
32
  /**
@@ -49,12 +46,12 @@ declare function createCatalogRegisterAction(options: {
49
46
  auth?: AuthService;
50
47
  }): _backstage_plugin_scaffolder_node.TemplateAction<{
51
48
  catalogInfoUrl: string;
52
- optional?: boolean | undefined;
49
+ optional?: boolean;
53
50
  } | {
54
51
  repoContentsUrl: string;
55
- catalogInfoPath?: string | undefined;
56
- optional?: boolean | undefined;
57
- }, _backstage_types.JsonObject>;
52
+ catalogInfoPath?: string;
53
+ optional?: boolean;
54
+ }, _backstage_types.JsonObject, "v1">;
58
55
 
59
56
  /**
60
57
  * Writes a catalog descriptor file containing the provided entity to a path in the workspace.
@@ -63,7 +60,7 @@ declare function createCatalogRegisterAction(options: {
63
60
  declare function createCatalogWriteAction(): _backstage_plugin_scaffolder_node.TemplateAction<{
64
61
  entity: Record<string, any>;
65
62
  filePath?: string | undefined;
66
- }, _backstage_types.JsonObject>;
63
+ }, any, "v1">;
67
64
 
68
65
  /**
69
66
  * Returns entity or entities from the catalog by entity reference(s).
@@ -74,15 +71,15 @@ declare function createFetchCatalogEntityAction(options: {
74
71
  catalogClient: CatalogApi;
75
72
  auth?: AuthService;
76
73
  }): _backstage_plugin_scaffolder_node.TemplateAction<{
74
+ entityRef?: string | undefined;
75
+ entityRefs?: string[] | undefined;
77
76
  optional?: boolean | undefined;
78
77
  defaultKind?: string | undefined;
79
78
  defaultNamespace?: string | undefined;
80
- entityRef?: string | undefined;
81
- entityRefs?: string[] | undefined;
82
79
  }, {
83
- entities?: any[] | undefined;
84
80
  entity?: any;
85
- }>;
81
+ entities?: any[] | undefined;
82
+ }, "v2">;
86
83
 
87
84
  /**
88
85
  * The options passed to {@link createBuiltinActions}
@@ -138,10 +135,7 @@ declare const createBuiltinActions: (options: CreateBuiltInActionsOptions) => Te
138
135
  *
139
136
  * @public
140
137
  */
141
- declare function createDebugLogAction(): _backstage_plugin_scaffolder_node.TemplateAction<{
142
- message?: string | undefined;
143
- listWorkspace?: boolean | "with-contents" | "with-filenames" | undefined;
144
- }, _backstage_types.JsonObject>;
138
+ declare function createDebugLogAction(): _backstage_plugin_scaffolder_node.TemplateAction<any, any, "v1">;
145
139
 
146
140
  /**
147
141
  * Waits for a certain period of time.
@@ -155,7 +149,7 @@ declare function createDebugLogAction(): _backstage_plugin_scaffolder_node.Templ
155
149
  */
156
150
  declare function createWaitAction(options?: {
157
151
  maxWaitTime?: Duration | HumanDuration;
158
- }): _backstage_plugin_scaffolder_node.TemplateAction<HumanDuration, _backstage_types.JsonObject>;
152
+ }): _backstage_plugin_scaffolder_node.TemplateAction<HumanDuration, _backstage_types.JsonObject, "v1">;
159
153
 
160
154
  /**
161
155
  * Downloads content and places it in the workspace, or optionally
@@ -167,9 +161,9 @@ declare function createFetchPlainAction(options: {
167
161
  integrations: ScmIntegrations;
168
162
  }): _backstage_plugin_scaffolder_node.TemplateAction<{
169
163
  url: string;
170
- targetPath?: string | undefined;
171
- token?: string | undefined;
172
- }, _backstage_types.JsonObject>;
164
+ targetPath?: string;
165
+ token?: string;
166
+ }, _backstage_types.JsonObject, "v1">;
173
167
 
174
168
  /**
175
169
  * Downloads content and places it in the workspace, or optionally
@@ -182,8 +176,8 @@ declare function createFetchPlainFileAction(options: {
182
176
  }): _backstage_plugin_scaffolder_node.TemplateAction<{
183
177
  url: string;
184
178
  targetPath: string;
185
- token?: string | undefined;
186
- }, _backstage_types.JsonObject>;
179
+ token?: string;
180
+ }, _backstage_types.JsonObject, "v1">;
187
181
 
188
182
  /**
189
183
  * Downloads a skeleton, templates variables into file and directory names and content.
@@ -199,20 +193,20 @@ declare function createFetchTemplateAction(options: {
199
193
  additionalTemplateGlobals?: Record<string, TemplateGlobal$1>;
200
194
  }): _backstage_plugin_scaffolder_node.TemplateAction<{
201
195
  url: string;
202
- targetPath?: string | undefined;
196
+ targetPath?: string;
203
197
  values: any;
204
- templateFileExtension?: string | boolean | undefined;
198
+ templateFileExtension?: string | boolean;
205
199
  /**
206
200
  * @deprecated This field is deprecated in favor of copyWithoutTemplating.
207
201
  */
208
- copyWithoutRender?: string[] | undefined;
209
- copyWithoutTemplating?: string[] | undefined;
210
- cookiecutterCompat?: boolean | undefined;
211
- replace?: boolean | undefined;
212
- trimBlocks?: boolean | undefined;
213
- lstripBlocks?: boolean | undefined;
214
- token?: string | undefined;
215
- }, _backstage_types.JsonObject>;
202
+ copyWithoutRender?: string[];
203
+ copyWithoutTemplating?: string[];
204
+ cookiecutterCompat?: boolean;
205
+ replace?: boolean;
206
+ trimBlocks?: boolean;
207
+ lstripBlocks?: boolean;
208
+ token?: string;
209
+ }, _backstage_types.JsonObject, "v1">;
216
210
 
217
211
  /**
218
212
  * Downloads a single file and templates variables into file.
@@ -229,12 +223,12 @@ declare function createFetchTemplateFileAction(options: {
229
223
  url: string;
230
224
  targetPath: string;
231
225
  values: any;
232
- cookiecutterCompat?: boolean | undefined;
233
- replace?: boolean | undefined;
234
- trimBlocks?: boolean | undefined;
235
- lstripBlocks?: boolean | undefined;
236
- token?: string | undefined;
237
- }, _backstage_types.JsonObject>;
226
+ cookiecutterCompat?: boolean;
227
+ replace?: boolean;
228
+ trimBlocks?: boolean;
229
+ lstripBlocks?: boolean;
230
+ token?: string;
231
+ }, _backstage_types.JsonObject, "v1">;
238
232
 
239
233
  /**
240
234
  * Creates new action that enables deletion of files and directories in the workspace.
@@ -242,7 +236,7 @@ declare function createFetchTemplateFileAction(options: {
242
236
  */
243
237
  declare const createFilesystemDeleteAction: () => _backstage_plugin_scaffolder_node.TemplateAction<{
244
238
  files: string[];
245
- }, _backstage_types.JsonObject>;
239
+ }, _backstage_types.JsonObject, "v1">;
246
240
 
247
241
  /**
248
242
  * Creates a new action that allows renames of files and directories in the workspace.
@@ -254,15 +248,15 @@ declare const createFilesystemRenameAction: () => _backstage_plugin_scaffolder_n
254
248
  to: string;
255
249
  overwrite?: boolean;
256
250
  }>;
257
- }, _backstage_types.JsonObject>;
251
+ }, _backstage_types.JsonObject, "v1">;
258
252
 
259
253
  /**
260
254
  * Creates new action that enables reading directories in the workspace.
261
255
  * @public
262
256
  */
263
257
  declare const createFilesystemReadDirAction: () => _backstage_plugin_scaffolder_node.TemplateAction<{
258
+ recursive: boolean;
264
259
  paths: string[];
265
- recursive?: boolean | undefined;
266
260
  }, {
267
261
  files: {
268
262
  name: string;
@@ -274,7 +268,7 @@ declare const createFilesystemReadDirAction: () => _backstage_plugin_scaffolder_
274
268
  path: string;
275
269
  fullPath: string;
276
270
  }[];
277
- }>;
271
+ }, "v1">;
278
272
 
279
273
  /**
280
274
  * @public
@@ -328,23 +322,23 @@ declare const createPublishGithubAction: typeof createPublishGithubAction$1;
328
322
  declare const createPublishGithubPullRequestAction: (options: CreateGithubPullRequestActionOptions$1) => _backstage_plugin_scaffolder_node.TemplateAction<{
329
323
  title: string;
330
324
  branchName: string;
331
- targetBranchName?: string | undefined;
325
+ targetBranchName?: string;
332
326
  description: string;
333
327
  repoUrl: string;
334
- draft?: boolean | undefined;
335
- targetPath?: string | undefined;
336
- sourcePath?: string | undefined;
337
- token?: string | undefined;
338
- reviewers?: string[] | undefined;
339
- teamReviewers?: string[] | undefined;
340
- commitMessage?: string | undefined;
341
- update?: boolean | undefined;
342
- forceFork?: boolean | undefined;
343
- gitAuthorName?: string | undefined;
344
- gitAuthorEmail?: string | undefined;
345
- forceEmptyGitAuthor?: boolean | undefined;
346
- createWhenEmpty?: boolean | undefined;
347
- }, _backstage_types.JsonObject>;
328
+ draft?: boolean;
329
+ targetPath?: string;
330
+ sourcePath?: string;
331
+ token?: string;
332
+ reviewers?: string[];
333
+ teamReviewers?: string[];
334
+ commitMessage?: string;
335
+ update?: boolean;
336
+ forceFork?: boolean;
337
+ gitAuthorName?: string;
338
+ gitAuthorEmail?: string;
339
+ forceEmptyGitAuthor?: boolean;
340
+ createWhenEmpty?: boolean;
341
+ }, _backstage_types.JsonObject, "v1">;
348
342
  /**
349
343
  * @public @deprecated use "createPublishBitbucketCloudAction" from \@backstage/plugin-scaffolder-backend-module-bitbucket-cloud or "createPublishBitbucketServerAction" from \@backstage/plugin-scaffolder-backend-module-bitbucket-server instead
350
344
  */
@@ -395,17 +389,17 @@ declare const createPublishGitlabMergeRequestAction: (options: {
395
389
  title: string;
396
390
  description: string;
397
391
  branchName: string;
398
- targetBranchName?: string | undefined;
399
- sourcePath?: string | undefined;
400
- targetPath?: string | undefined;
401
- token?: string | undefined;
402
- commitAction?: "auto" | "update" | "delete" | "create" | "skip" | undefined;
403
- projectid?: string | undefined;
404
- removeSourceBranch?: boolean | undefined;
405
- assignee?: string | undefined;
406
- reviewers?: string[] | undefined;
407
- assignReviewersFromApprovalRules?: boolean | undefined;
408
- }, _backstage_types.JsonObject>;
392
+ targetBranchName?: string;
393
+ sourcePath?: string;
394
+ targetPath?: string;
395
+ token?: string;
396
+ commitAction?: "create" | "delete" | "update" | "skip" | "auto";
397
+ projectid?: string;
398
+ removeSourceBranch?: boolean;
399
+ assignee?: string;
400
+ reviewers?: string[];
401
+ assignReviewersFromApprovalRules?: boolean;
402
+ }, _backstage_types.JsonObject, "v1">;
409
403
 
410
404
  /**
411
405
  * Registry of all registered template actions.
@@ -413,9 +407,9 @@ declare const createPublishGitlabMergeRequestAction: (options: {
413
407
  */
414
408
  declare class TemplateActionRegistry {
415
409
  private readonly actions;
416
- register(action: TemplateAction$1): void;
417
- get(actionId: string): TemplateAction$1;
418
- list(): TemplateAction$1[];
410
+ register(action: TemplateAction$1<any, any, any>): void;
411
+ get(actionId: string): TemplateAction$1<any, any, any>;
412
+ list(): TemplateAction$1<any, any, any>[];
419
413
  }
420
414
 
421
415
  /**
@@ -879,7 +873,7 @@ interface RouterOptions {
879
873
  database: DatabaseService;
880
874
  catalogClient: CatalogApi;
881
875
  scheduler?: SchedulerService;
882
- actions?: TemplateAction$1<any, any>[];
876
+ actions?: TemplateAction$1<any, any, any>[];
883
877
  /**
884
878
  * @deprecated taskWorkers is deprecated in favor of concurrentTasksLimit option with a single TaskWorker
885
879
  * @defaultValue 1
@@ -931,7 +925,7 @@ type ActionContext<TInput extends JsonObject> = ActionContext$1<TInput>;
931
925
  * @public
932
926
  * @deprecated Use `createTemplateAction` from `@backstage/plugin-scaffolder-node` instead
933
927
  */
934
- declare const createTemplateAction: <TInputParams extends JsonObject = JsonObject, TOutputParams extends JsonObject = JsonObject, TInputSchema extends zod.ZodType<any, zod.ZodTypeDef, any> | jsonschema.Schema = {}, TOutputSchema extends zod.ZodType<any, zod.ZodTypeDef, any> | jsonschema.Schema = {}, TActionInput extends JsonObject = TInputSchema extends zod.ZodType<any, any, infer IReturn> ? IReturn : TInputParams, TActionOutput extends JsonObject = TOutputSchema extends zod.ZodType<any, any, infer IReturn_1> ? IReturn_1 : TOutputParams>(action: _backstage_plugin_scaffolder_node.TemplateActionOptions<TActionInput, TActionOutput, TInputSchema, TOutputSchema>) => TemplateAction$1<TActionInput, TActionOutput>;
928
+ declare const createTemplateAction: typeof createTemplateAction$1;
935
929
  /**
936
930
  * @public
937
931
  * @deprecated Use `TaskSecrets` from `@backstage/plugin-scaffolder-node` instead
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var catalogModel = require('@backstage/catalog-model');
4
6
  var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
5
7
  var get = require('lodash/get');
@@ -8,7 +10,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
8
10
 
9
11
  var get__default = /*#__PURE__*/_interopDefaultCompat(get);
10
12
 
11
- const createDefaultFilters = ({
13
+ var createDefaultFilters = ({
12
14
  integrations
13
15
  }) => {
14
16
  return {
@@ -22,5 +24,5 @@ const createDefaultFilters = ({
22
24
  };
23
25
  };
24
26
 
25
- exports.createDefaultFilters = createDefaultFilters;
27
+ exports.default = createDefaultFilters;
26
28
  //# sourceMappingURL=filters.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filters.cjs.js","sources":["../../../src/lib/templating/filters.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 */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { ScmIntegrations } from '@backstage/integration';\nimport type { JsonObject, JsonValue } from '@backstage/types';\nimport {\n parseRepoUrl,\n TemplateFilter,\n} from '@backstage/plugin-scaffolder-node';\nimport get from 'lodash/get';\n\nexport const createDefaultFilters = ({\n integrations,\n}: {\n integrations: ScmIntegrations;\n}): Record<string, TemplateFilter> => {\n return {\n parseRepoUrl: url => parseRepoUrl(url as string, integrations),\n parseEntityRef: (ref: JsonValue, context?: JsonValue) =>\n parseEntityRef(ref as string, context as JsonObject),\n pick: (obj: JsonValue, key: JsonValue) => get(obj, key as string),\n projectSlug: repoUrl => {\n const { owner, repo } = parseRepoUrl(repoUrl as string, integrations);\n return `${owner}/${repo}`;\n },\n };\n};\n"],"names":["parseRepoUrl","parseEntityRef","get"],"mappings":";;;;;;;;;;AAwBO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AACF,CAEsC,KAAA;AACpC,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,CAAA,GAAA,KAAOA,iCAAa,CAAA,GAAA,EAAe,YAAY,CAAA;AAAA,IAC7D,gBAAgB,CAAC,GAAA,EAAgB,OAC/B,KAAAC,2BAAA,CAAe,KAAe,OAAqB,CAAA;AAAA,IACrD,MAAM,CAAC,GAAA,EAAgB,GAAmB,KAAAC,oBAAA,CAAI,KAAK,GAAa,CAAA;AAAA,IAChE,aAAa,CAAW,OAAA,KAAA;AACtB,MAAA,MAAM,EAAE,KAAO,EAAA,IAAA,EAAS,GAAAF,iCAAA,CAAa,SAAmB,YAAY,CAAA;AACpE,MAAO,OAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA;AACzB,GACF;AACF;;;;"}
1
+ {"version":3,"file":"filters.cjs.js","sources":["../../../src/lib/templating/filters.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 */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { ScmIntegrations } from '@backstage/integration';\nimport type { JsonObject, JsonValue } from '@backstage/types';\nimport {\n parseRepoUrl,\n TemplateFilter,\n} from '@backstage/plugin-scaffolder-node';\nimport get from 'lodash/get';\n\nexport default ({\n integrations,\n}: {\n integrations: ScmIntegrations;\n}): Record<string, TemplateFilter> => {\n return {\n parseRepoUrl: url => parseRepoUrl(url as string, integrations),\n parseEntityRef: (ref: JsonValue, context?: JsonValue) =>\n parseEntityRef(ref as string, context as JsonObject),\n pick: (obj: JsonValue, key: JsonValue) => get(obj, key as string),\n projectSlug: repoUrl => {\n const { owner, repo } = parseRepoUrl(repoUrl as string, integrations);\n return `${owner}/${repo}`;\n },\n };\n};\n"],"names":["parseRepoUrl","parseEntityRef","get"],"mappings":";;;;;;;;;;;;AAwBA,2BAAe,CAAC;AAAA,EACd;AACF,CAEsC,KAAA;AACpC,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,CAAA,GAAA,KAAOA,iCAAa,CAAA,GAAA,EAAe,YAAY,CAAA;AAAA,IAC7D,gBAAgB,CAAC,GAAA,EAAgB,OAC/B,KAAAC,2BAAA,CAAe,KAAe,OAAqB,CAAA;AAAA,IACrD,MAAM,CAAC,GAAA,EAAgB,GAAmB,KAAAC,oBAAA,CAAI,KAAK,GAAa,CAAA;AAAA,IAChE,aAAa,CAAW,OAAA,KAAA;AACtB,MAAA,MAAM,EAAE,KAAO,EAAA,IAAA,EAAS,GAAAF,iCAAA,CAAa,SAAmB,YAAY,CAAA;AACpE,MAAO,OAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA;AACzB,GACF;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateActionRegistry.cjs.js","sources":["../../../src/scaffolder/actions/TemplateActionRegistry.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { ConflictError, NotFoundError } from '@backstage/errors';\nimport { TemplateAction } from '@backstage/plugin-scaffolder-node';\n/**\n * Registry of all registered template actions.\n * @public\n */\nexport class TemplateActionRegistry {\n private readonly actions = new Map<string, TemplateAction>();\n\n register(action: TemplateAction) {\n if (this.actions.has(action.id)) {\n throw new ConflictError(\n `Template action with ID '${action.id}' has already been registered`,\n );\n }\n\n this.actions.set(action.id, action);\n }\n\n get(actionId: string): TemplateAction {\n const action = this.actions.get(actionId);\n if (!action) {\n throw new NotFoundError(\n `Template action with ID '${actionId}' is not registered. See https://backstage.io/docs/features/software-templates/builtin-actions/ on how to add a new action module.`,\n );\n }\n return action;\n }\n\n list(): TemplateAction[] {\n return [...this.actions.values()];\n }\n}\n"],"names":["ConflictError","NotFoundError"],"mappings":";;;;AAsBO,MAAM,sBAAuB,CAAA;AAAA,EACjB,OAAA,uBAAc,GAA4B,EAAA;AAAA,EAE3D,SAAS,MAAwB,EAAA;AAC/B,IAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,CAAO,EAAE,CAAG,EAAA;AAC/B,MAAA,MAAM,IAAIA,oBAAA;AAAA,QACR,CAAA,yBAAA,EAA4B,OAAO,EAAE,CAAA,6BAAA;AAAA,OACvC;AAAA;AAGF,IAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,MAAO,CAAA,EAAA,EAAI,MAAM,CAAA;AAAA;AACpC,EAEA,IAAI,QAAkC,EAAA;AACpC,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIC,oBAAA;AAAA,QACR,4BAA4B,QAAQ,CAAA,kIAAA;AAAA,OACtC;AAAA;AAEF,IAAO,OAAA,MAAA;AAAA;AACT,EAEA,IAAyB,GAAA;AACvB,IAAA,OAAO,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAEpC;;;;"}
1
+ {"version":3,"file":"TemplateActionRegistry.cjs.js","sources":["../../../src/scaffolder/actions/TemplateActionRegistry.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { ConflictError, NotFoundError } from '@backstage/errors';\nimport { TemplateAction } from '@backstage/plugin-scaffolder-node';\n/**\n * Registry of all registered template actions.\n * @public\n */\nexport class TemplateActionRegistry {\n private readonly actions = new Map<string, TemplateAction>();\n\n register(action: TemplateAction<any, any, any>) {\n if (this.actions.has(action.id)) {\n throw new ConflictError(\n `Template action with ID '${action.id}' has already been registered`,\n );\n }\n\n this.actions.set(action.id, action);\n }\n\n get(actionId: string): TemplateAction<any, any, any> {\n const action = this.actions.get(actionId);\n if (!action) {\n throw new NotFoundError(\n `Template action with ID '${actionId}' is not registered. See https://backstage.io/docs/features/software-templates/builtin-actions/ on how to add a new action module.`,\n );\n }\n return action;\n }\n\n list(): TemplateAction<any, any, any>[] {\n return [...this.actions.values()];\n }\n}\n"],"names":["ConflictError","NotFoundError"],"mappings":";;;;AAsBO,MAAM,sBAAuB,CAAA;AAAA,EACjB,OAAA,uBAAc,GAA4B,EAAA;AAAA,EAE3D,SAAS,MAAuC,EAAA;AAC9C,IAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,CAAO,EAAE,CAAG,EAAA;AAC/B,MAAA,MAAM,IAAIA,oBAAA;AAAA,QACR,CAAA,yBAAA,EAA4B,OAAO,EAAE,CAAA,6BAAA;AAAA,OACvC;AAAA;AAGF,IAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,MAAO,CAAA,EAAA,EAAI,MAAM,CAAA;AAAA;AACpC,EAEA,IAAI,QAAiD,EAAA;AACnD,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIC,oBAAA;AAAA,QACR,4BAA4B,QAAQ,CAAA,kIAAA;AAAA,OACtC;AAAA;AAEF,IAAO,OAAA,MAAA;AAAA;AACT,EAEA,IAAwC,GAAA;AACtC,IAAA,OAAO,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAEpC;;;;"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
4
- var z = require('zod');
5
4
  var catalogModel = require('@backstage/catalog-model');
6
5
  var fetch_examples = require('./fetch.examples.cjs.js');
7
6
 
@@ -14,29 +13,29 @@ function createFetchCatalogEntityAction(options) {
14
13
  examples: fetch_examples.examples,
15
14
  supportsDryRun: true,
16
15
  schema: {
17
- input: z.z.object({
18
- entityRef: z.z.string({
16
+ input: {
17
+ entityRef: (z) => z.string({
19
18
  description: "Entity reference of the entity to get"
20
19
  }).optional(),
21
- entityRefs: z.z.array(z.z.string(), {
20
+ entityRefs: (z) => z.array(z.string(), {
22
21
  description: "Entity references of the entities to get"
23
22
  }).optional(),
24
- optional: z.z.boolean({
23
+ optional: (z) => z.boolean({
25
24
  description: "Allow the entity or entities to optionally exist. Default: false"
26
25
  }).optional(),
27
- defaultKind: z.z.string({ description: "The default kind" }).optional(),
28
- defaultNamespace: z.z.string({ description: "The default namespace" }).optional()
29
- }),
30
- output: z.z.object({
31
- entity: z.z.any({
26
+ defaultKind: (z) => z.string({ description: "The default kind" }).optional(),
27
+ defaultNamespace: (z) => z.string({ description: "The default namespace" }).optional()
28
+ },
29
+ output: {
30
+ entity: (z) => z.any({
32
31
  description: "Object containing same values used in the Entity schema. Only when used with `entityRef` parameter."
33
32
  }).optional(),
34
- entities: z.z.array(
35
- z.z.any({
33
+ entities: (z) => z.array(
34
+ z.any({
36
35
  description: "Array containing objects with same values used in the Entity schema. Only when used with `entityRefs` parameter."
37
36
  })
38
37
  ).optional()
39
- })
38
+ }
40
39
  },
41
40
  async handler(ctx) {
42
41
  const { entityRef, entityRefs, optional, defaultKind, defaultNamespace } = ctx.input;