@backstage/plugin-scaffolder-backend 1.26.0-next.0 → 1.26.0-next.2

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.
Files changed (105) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/ScaffolderPlugin.cjs.js +168 -0
  4. package/dist/ScaffolderPlugin.cjs.js.map +1 -0
  5. package/dist/alpha.cjs.js +7 -196
  6. package/dist/alpha.cjs.js.map +1 -1
  7. package/dist/deprecated.cjs.js +15 -0
  8. package/dist/deprecated.cjs.js.map +1 -0
  9. package/dist/index.cjs.js +57 -134
  10. package/dist/index.cjs.js.map +1 -1
  11. package/dist/lib/templating/SecureTemplater.cjs.js +169 -0
  12. package/dist/lib/templating/SecureTemplater.cjs.js.map +1 -0
  13. package/dist/lib/templating/filters.cjs.js +26 -0
  14. package/dist/lib/templating/filters.cjs.js.map +1 -0
  15. package/dist/lib/templating/helpers.cjs.js +13 -0
  16. package/dist/lib/templating/helpers.cjs.js.map +1 -0
  17. package/dist/scaffolder/actions/TemplateActionRegistry.cjs.js +30 -0
  18. package/dist/scaffolder/actions/TemplateActionRegistry.cjs.js.map +1 -0
  19. package/dist/scaffolder/actions/builtin/catalog/fetch.cjs.js +93 -0
  20. package/dist/scaffolder/actions/builtin/catalog/fetch.cjs.js.map +1 -0
  21. package/dist/scaffolder/actions/builtin/catalog/fetch.examples.cjs.js +43 -0
  22. package/dist/scaffolder/actions/builtin/catalog/fetch.examples.cjs.js.map +1 -0
  23. package/dist/scaffolder/actions/builtin/catalog/register.cjs.js +142 -0
  24. package/dist/scaffolder/actions/builtin/catalog/register.cjs.js.map +1 -0
  25. package/dist/scaffolder/actions/builtin/catalog/register.examples.cjs.js +28 -0
  26. package/dist/scaffolder/actions/builtin/catalog/register.examples.cjs.js.map +1 -0
  27. package/dist/scaffolder/actions/builtin/catalog/write.cjs.js +74 -0
  28. package/dist/scaffolder/actions/builtin/catalog/write.cjs.js.map +1 -0
  29. package/dist/scaffolder/actions/builtin/catalog/write.examples.cjs.js +56 -0
  30. package/dist/scaffolder/actions/builtin/catalog/write.examples.cjs.js.map +1 -0
  31. package/dist/scaffolder/actions/builtin/createBuiltinActions.cjs.js +156 -0
  32. package/dist/scaffolder/actions/builtin/createBuiltinActions.cjs.js.map +1 -0
  33. package/dist/scaffolder/actions/builtin/debug/log.cjs.js +66 -0
  34. package/dist/scaffolder/actions/builtin/debug/log.cjs.js.map +1 -0
  35. package/dist/scaffolder/actions/builtin/debug/log.examples.cjs.js +58 -0
  36. package/dist/scaffolder/actions/builtin/debug/log.examples.cjs.js.map +1 -0
  37. package/dist/scaffolder/actions/builtin/debug/wait.cjs.js +66 -0
  38. package/dist/scaffolder/actions/builtin/debug/wait.cjs.js.map +1 -0
  39. package/dist/scaffolder/actions/builtin/debug/wait.examples.cjs.js +58 -0
  40. package/dist/scaffolder/actions/builtin/debug/wait.examples.cjs.js.map +1 -0
  41. package/dist/scaffolder/actions/builtin/fetch/plain.cjs.js +56 -0
  42. package/dist/scaffolder/actions/builtin/fetch/plain.cjs.js.map +1 -0
  43. package/dist/scaffolder/actions/builtin/fetch/plain.examples.cjs.js +44 -0
  44. package/dist/scaffolder/actions/builtin/fetch/plain.examples.cjs.js.map +1 -0
  45. package/dist/scaffolder/actions/builtin/fetch/plainFile.cjs.js +56 -0
  46. package/dist/scaffolder/actions/builtin/fetch/plainFile.cjs.js.map +1 -0
  47. package/dist/scaffolder/actions/builtin/fetch/plainFile.examples.cjs.js +29 -0
  48. package/dist/scaffolder/actions/builtin/fetch/plainFile.examples.cjs.js.map +1 -0
  49. package/dist/scaffolder/actions/builtin/fetch/template.cjs.js +241 -0
  50. package/dist/scaffolder/actions/builtin/fetch/template.cjs.js.map +1 -0
  51. package/dist/scaffolder/actions/builtin/fetch/template.examples.cjs.js +35 -0
  52. package/dist/scaffolder/actions/builtin/fetch/template.examples.cjs.js.map +1 -0
  53. package/dist/scaffolder/actions/builtin/fetch/templateFile.cjs.js +119 -0
  54. package/dist/scaffolder/actions/builtin/fetch/templateFile.cjs.js.map +1 -0
  55. package/dist/scaffolder/actions/builtin/fetch/templateFile.examples.cjs.js +34 -0
  56. package/dist/scaffolder/actions/builtin/fetch/templateFile.examples.cjs.js.map +1 -0
  57. package/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js +54 -0
  58. package/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map +1 -0
  59. package/dist/scaffolder/actions/builtin/filesystem/delete.examples.cjs.js +44 -0
  60. package/dist/scaffolder/actions/builtin/filesystem/delete.examples.cjs.js.map +1 -0
  61. package/dist/scaffolder/actions/builtin/filesystem/rename.cjs.js +83 -0
  62. package/dist/scaffolder/actions/builtin/filesystem/rename.cjs.js.map +1 -0
  63. package/dist/scaffolder/actions/builtin/filesystem/rename.examples.cjs.js +48 -0
  64. package/dist/scaffolder/actions/builtin/filesystem/rename.examples.cjs.js.map +1 -0
  65. package/dist/scaffolder/actions/deprecated.cjs.js +74 -0
  66. package/dist/scaffolder/actions/deprecated.cjs.js.map +1 -0
  67. package/dist/scaffolder/dryrun/DecoratedActionsRegistry.cjs.js +57 -0
  68. package/dist/scaffolder/dryrun/DecoratedActionsRegistry.cjs.js.map +1 -0
  69. package/dist/scaffolder/dryrun/createDryRunner.cjs.js +97 -0
  70. package/dist/scaffolder/dryrun/createDryRunner.cjs.js.map +1 -0
  71. package/dist/scaffolder/tasks/DatabaseTaskStore.cjs.js +430 -0
  72. package/dist/scaffolder/tasks/DatabaseTaskStore.cjs.js.map +1 -0
  73. package/dist/scaffolder/tasks/DatabaseWorkspaceProvider.cjs.js +22 -0
  74. package/dist/scaffolder/tasks/DatabaseWorkspaceProvider.cjs.js.map +1 -0
  75. package/dist/scaffolder/tasks/NunjucksWorkflowRunner.cjs.js +545 -0
  76. package/dist/scaffolder/tasks/NunjucksWorkflowRunner.cjs.js.map +1 -0
  77. package/dist/scaffolder/tasks/StorageTaskBroker.cjs.js +318 -0
  78. package/dist/scaffolder/tasks/StorageTaskBroker.cjs.js.map +1 -0
  79. package/dist/scaffolder/tasks/TaskWorker.cjs.js +110 -0
  80. package/dist/scaffolder/tasks/TaskWorker.cjs.js.map +1 -0
  81. package/dist/scaffolder/tasks/WorkspaceService.cjs.js +50 -0
  82. package/dist/scaffolder/tasks/WorkspaceService.cjs.js.map +1 -0
  83. package/dist/scaffolder/tasks/dbUtil.cjs.js +20 -0
  84. package/dist/scaffolder/tasks/dbUtil.cjs.js.map +1 -0
  85. package/dist/scaffolder/tasks/helper.cjs.js +46 -0
  86. package/dist/scaffolder/tasks/helper.cjs.js.map +1 -0
  87. package/dist/scaffolder/tasks/logger.cjs.js +156 -0
  88. package/dist/scaffolder/tasks/logger.cjs.js.map +1 -0
  89. package/dist/scaffolder/tasks/taskRecoveryHelper.cjs.js +18 -0
  90. package/dist/scaffolder/tasks/taskRecoveryHelper.cjs.js.map +1 -0
  91. package/dist/service/conditionExports.cjs.js +26 -0
  92. package/dist/service/conditionExports.cjs.js.map +1 -0
  93. package/dist/service/helpers.cjs.js +92 -0
  94. package/dist/service/helpers.cjs.js.map +1 -0
  95. package/dist/service/router.cjs.js +640 -0
  96. package/dist/service/router.cjs.js.map +1 -0
  97. package/dist/service/rules.cjs.js +97 -0
  98. package/dist/service/rules.cjs.js.map +1 -0
  99. package/dist/util/checkPermissions.cjs.js +25 -0
  100. package/dist/util/checkPermissions.cjs.js.map +1 -0
  101. package/dist/util/metrics.cjs.js +24 -0
  102. package/dist/util/metrics.cjs.js.map +1 -0
  103. package/package.json +30 -30
  104. package/dist/cjs/router-CC-UhVkG.cjs.js +0 -4101
  105. package/dist/cjs/router-CC-UhVkG.cjs.js.map +0 -1
package/dist/index.cjs.js CHANGED
@@ -1,141 +1,64 @@
1
1
  'use strict';
2
2
 
3
- var router = require('./cjs/router-CC-UhVkG.cjs.js');
4
- var github = require('@backstage/plugin-scaffolder-backend-module-github');
5
- var gitlab = require('@backstage/plugin-scaffolder-backend-module-gitlab');
6
- var azure = require('@backstage/plugin-scaffolder-backend-module-azure');
7
- var bitbucket = require('@backstage/plugin-scaffolder-backend-module-bitbucket');
8
- var bitbucketCloud = require('@backstage/plugin-scaffolder-backend-module-bitbucket-cloud');
9
- var bitbucketServer = require('@backstage/plugin-scaffolder-backend-module-bitbucket-server');
10
- var gerrit = require('@backstage/plugin-scaffolder-backend-module-gerrit');
11
- var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
12
- var pluginCatalogBackendModuleScaffolderEntityModel = require('@backstage/plugin-catalog-backend-module-scaffolder-entity-model');
13
- require('@backstage/backend-common');
14
- require('@backstage/catalog-model');
15
- require('@backstage/config');
16
- require('@backstage/errors');
17
- require('@backstage/integration');
18
- require('@backstage/plugin-scaffolder-common');
19
- require('@backstage/plugin-scaffolder-common/alpha');
20
- require('express');
21
- require('express-promise-router');
22
- require('jsonschema');
23
- require('zod');
24
- require('yaml');
25
- require('fs-extra');
26
- require('@backstage/backend-plugin-api');
27
- require('path');
28
- require('fs');
29
- require('luxon');
30
- require('globby');
31
- require('isbinaryfile');
32
- require('isolated-vm');
33
- require('lodash/get');
34
- require('@backstage/plugin-scaffolder-backend-module-gitea');
35
- require('uuid');
36
- require('@backstage/plugin-scaffolder-node/alpha');
37
- require('os');
38
- require('zen-observable');
39
- require('lodash');
40
- require('p-queue');
41
- require('winston');
42
- require('nunjucks');
43
- require('stream');
44
- require('@opentelemetry/api');
45
- require('@backstage/plugin-permission-node');
46
- require('prom-client');
47
- require('@backstage/plugin-permission-common');
48
- require('winston-transport');
49
- require('triple-beam');
50
- require('url');
3
+ var register = require('./scaffolder/actions/builtin/catalog/register.cjs.js');
4
+ var write = require('./scaffolder/actions/builtin/catalog/write.cjs.js');
5
+ var fetch = require('./scaffolder/actions/builtin/catalog/fetch.cjs.js');
6
+ var createBuiltinActions = require('./scaffolder/actions/builtin/createBuiltinActions.cjs.js');
7
+ var log = require('./scaffolder/actions/builtin/debug/log.cjs.js');
8
+ var wait = require('./scaffolder/actions/builtin/debug/wait.cjs.js');
9
+ var plain = require('./scaffolder/actions/builtin/fetch/plain.cjs.js');
10
+ var plainFile = require('./scaffolder/actions/builtin/fetch/plainFile.cjs.js');
11
+ var template = require('./scaffolder/actions/builtin/fetch/template.cjs.js');
12
+ var templateFile = require('./scaffolder/actions/builtin/fetch/templateFile.cjs.js');
13
+ var _delete = require('./scaffolder/actions/builtin/filesystem/delete.cjs.js');
14
+ var rename = require('./scaffolder/actions/builtin/filesystem/rename.cjs.js');
15
+ var deprecated = require('./scaffolder/actions/deprecated.cjs.js');
16
+ var TemplateActionRegistry = require('./scaffolder/actions/TemplateActionRegistry.cjs.js');
17
+ var DatabaseTaskStore = require('./scaffolder/tasks/DatabaseTaskStore.cjs.js');
18
+ var StorageTaskBroker = require('./scaffolder/tasks/StorageTaskBroker.cjs.js');
19
+ var TaskWorker = require('./scaffolder/tasks/TaskWorker.cjs.js');
20
+ var router = require('./service/router.cjs.js');
21
+ var deprecated$1 = require('./deprecated.cjs.js');
51
22
 
52
- function _interopNamespaceCompat(e) {
53
- if (e && typeof e === 'object' && 'default' in e) return e;
54
- var n = Object.create(null);
55
- if (e) {
56
- Object.keys(e).forEach(function (k) {
57
- if (k !== 'default') {
58
- var d = Object.getOwnPropertyDescriptor(e, k);
59
- Object.defineProperty(n, k, d.get ? d : {
60
- enumerable: true,
61
- get: function () { return e[k]; }
62
- });
63
- }
64
- });
65
- }
66
- n.default = e;
67
- return Object.freeze(n);
68
- }
69
23
 
70
- var github__namespace = /*#__PURE__*/_interopNamespaceCompat(github);
71
- var gitlab__namespace = /*#__PURE__*/_interopNamespaceCompat(gitlab);
72
- var azure__namespace = /*#__PURE__*/_interopNamespaceCompat(azure);
73
- var bitbucket__namespace = /*#__PURE__*/_interopNamespaceCompat(bitbucket);
74
- var bitbucketCloud__namespace = /*#__PURE__*/_interopNamespaceCompat(bitbucketCloud);
75
- var bitbucketServer__namespace = /*#__PURE__*/_interopNamespaceCompat(bitbucketServer);
76
- var gerrit__namespace = /*#__PURE__*/_interopNamespaceCompat(gerrit);
77
24
 
78
- const createGithubActionsDispatchAction = github__namespace.createGithubActionsDispatchAction;
79
- const createGithubDeployKeyAction = github__namespace.createGithubDeployKeyAction;
80
- const createGithubEnvironmentAction = github__namespace.createGithubEnvironmentAction;
81
- const createGithubIssuesLabelAction = github__namespace.createGithubIssuesLabelAction;
82
- const createGithubRepoCreateAction = github__namespace.createGithubRepoCreateAction;
83
- const createGithubRepoPushAction = github__namespace.createGithubRepoPushAction;
84
- const createGithubWebhookAction = github__namespace.createGithubWebhookAction;
85
- const createPublishGithubAction = github__namespace.createPublishGithubAction;
86
- const createPublishGithubPullRequestAction = github__namespace.createPublishGithubPullRequestAction;
87
- const createPublishBitbucketAction = bitbucket__namespace.createPublishBitbucketAction;
88
- const createPublishBitbucketCloudAction = bitbucketCloud__namespace.createPublishBitbucketCloudAction;
89
- const createPublishBitbucketServerAction = bitbucketServer__namespace.createPublishBitbucketServerAction;
90
- const createPublishBitbucketServerPullRequestAction = bitbucketServer__namespace.createPublishBitbucketServerPullRequestAction;
91
- const createPublishAzureAction = azure__namespace.createPublishAzureAction;
92
- const createPublishGerritAction = gerrit__namespace.createPublishGerritAction;
93
- const createPublishGerritReviewAction = gerrit__namespace.createPublishGerritReviewAction;
94
- const createPublishGitlabAction = gitlab__namespace.createPublishGitlabAction;
95
- const createPublishGitlabMergeRequestAction = gitlab__namespace.createPublishGitlabMergeRequestAction;
96
-
97
- const createTemplateAction = pluginScaffolderNode.createTemplateAction;
98
- const executeShellCommand = pluginScaffolderNode.executeShellCommand;
99
- const fetchContents = pluginScaffolderNode.fetchContents;
100
- const ScaffolderEntitiesProcessor = pluginCatalogBackendModuleScaffolderEntityModel.ScaffolderEntitiesProcessor;
101
-
102
- exports.DatabaseTaskStore = router.DatabaseTaskStore;
103
- exports.TaskManager = router.TaskManager;
104
- exports.TaskWorker = router.TaskWorker;
105
- exports.TemplateActionRegistry = router.TemplateActionRegistry;
106
- exports.createBuiltinActions = router.createBuiltinActions;
107
- exports.createCatalogRegisterAction = router.createCatalogRegisterAction;
108
- exports.createCatalogWriteAction = router.createCatalogWriteAction;
109
- exports.createDebugLogAction = router.createDebugLogAction;
110
- exports.createFetchCatalogEntityAction = router.createFetchCatalogEntityAction;
111
- exports.createFetchPlainAction = router.createFetchPlainAction;
112
- exports.createFetchPlainFileAction = router.createFetchPlainFileAction;
113
- exports.createFetchTemplateAction = router.createFetchTemplateAction;
114
- exports.createFetchTemplateFileAction = router.createFetchTemplateFileAction;
115
- exports.createFilesystemDeleteAction = router.createFilesystemDeleteAction;
116
- exports.createFilesystemRenameAction = router.createFilesystemRenameAction;
25
+ exports.createCatalogRegisterAction = register.createCatalogRegisterAction;
26
+ exports.createCatalogWriteAction = write.createCatalogWriteAction;
27
+ exports.createFetchCatalogEntityAction = fetch.createFetchCatalogEntityAction;
28
+ exports.createBuiltinActions = createBuiltinActions.createBuiltinActions;
29
+ exports.createDebugLogAction = log.createDebugLogAction;
30
+ exports.createWaitAction = wait.createWaitAction;
31
+ exports.createFetchPlainAction = plain.createFetchPlainAction;
32
+ exports.createFetchPlainFileAction = plainFile.createFetchPlainFileAction;
33
+ exports.createFetchTemplateAction = template.createFetchTemplateAction;
34
+ exports.createFetchTemplateFileAction = templateFile.createFetchTemplateFileAction;
35
+ exports.createFilesystemDeleteAction = _delete.createFilesystemDeleteAction;
36
+ exports.createFilesystemRenameAction = rename.createFilesystemRenameAction;
37
+ exports.createGithubActionsDispatchAction = deprecated.createGithubActionsDispatchAction;
38
+ exports.createGithubDeployKeyAction = deprecated.createGithubDeployKeyAction;
39
+ exports.createGithubEnvironmentAction = deprecated.createGithubEnvironmentAction;
40
+ exports.createGithubIssuesLabelAction = deprecated.createGithubIssuesLabelAction;
41
+ exports.createGithubRepoCreateAction = deprecated.createGithubRepoCreateAction;
42
+ exports.createGithubRepoPushAction = deprecated.createGithubRepoPushAction;
43
+ exports.createGithubWebhookAction = deprecated.createGithubWebhookAction;
44
+ exports.createPublishAzureAction = deprecated.createPublishAzureAction;
45
+ exports.createPublishBitbucketAction = deprecated.createPublishBitbucketAction;
46
+ exports.createPublishBitbucketCloudAction = deprecated.createPublishBitbucketCloudAction;
47
+ exports.createPublishBitbucketServerAction = deprecated.createPublishBitbucketServerAction;
48
+ exports.createPublishBitbucketServerPullRequestAction = deprecated.createPublishBitbucketServerPullRequestAction;
49
+ exports.createPublishGerritAction = deprecated.createPublishGerritAction;
50
+ exports.createPublishGerritReviewAction = deprecated.createPublishGerritReviewAction;
51
+ exports.createPublishGithubAction = deprecated.createPublishGithubAction;
52
+ exports.createPublishGithubPullRequestAction = deprecated.createPublishGithubPullRequestAction;
53
+ exports.createPublishGitlabAction = deprecated.createPublishGitlabAction;
54
+ exports.createPublishGitlabMergeRequestAction = deprecated.createPublishGitlabMergeRequestAction;
55
+ exports.TemplateActionRegistry = TemplateActionRegistry.TemplateActionRegistry;
56
+ exports.DatabaseTaskStore = DatabaseTaskStore.DatabaseTaskStore;
57
+ exports.TaskManager = StorageTaskBroker.TaskManager;
58
+ exports.TaskWorker = TaskWorker.TaskWorker;
117
59
  exports.createRouter = router.createRouter;
118
- exports.createWaitAction = router.createWaitAction;
119
- exports.ScaffolderEntitiesProcessor = ScaffolderEntitiesProcessor;
120
- exports.createGithubActionsDispatchAction = createGithubActionsDispatchAction;
121
- exports.createGithubDeployKeyAction = createGithubDeployKeyAction;
122
- exports.createGithubEnvironmentAction = createGithubEnvironmentAction;
123
- exports.createGithubIssuesLabelAction = createGithubIssuesLabelAction;
124
- exports.createGithubRepoCreateAction = createGithubRepoCreateAction;
125
- exports.createGithubRepoPushAction = createGithubRepoPushAction;
126
- exports.createGithubWebhookAction = createGithubWebhookAction;
127
- exports.createPublishAzureAction = createPublishAzureAction;
128
- exports.createPublishBitbucketAction = createPublishBitbucketAction;
129
- exports.createPublishBitbucketCloudAction = createPublishBitbucketCloudAction;
130
- exports.createPublishBitbucketServerAction = createPublishBitbucketServerAction;
131
- exports.createPublishBitbucketServerPullRequestAction = createPublishBitbucketServerPullRequestAction;
132
- exports.createPublishGerritAction = createPublishGerritAction;
133
- exports.createPublishGerritReviewAction = createPublishGerritReviewAction;
134
- exports.createPublishGithubAction = createPublishGithubAction;
135
- exports.createPublishGithubPullRequestAction = createPublishGithubPullRequestAction;
136
- exports.createPublishGitlabAction = createPublishGitlabAction;
137
- exports.createPublishGitlabMergeRequestAction = createPublishGitlabMergeRequestAction;
138
- exports.createTemplateAction = createTemplateAction;
139
- exports.executeShellCommand = executeShellCommand;
140
- exports.fetchContents = fetchContents;
60
+ exports.ScaffolderEntitiesProcessor = deprecated$1.ScaffolderEntitiesProcessor;
61
+ exports.createTemplateAction = deprecated$1.createTemplateAction;
62
+ exports.executeShellCommand = deprecated$1.executeShellCommand;
63
+ exports.fetchContents = deprecated$1.fetchContents;
141
64
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/scaffolder/actions/deprecated.ts","../src/deprecated.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 * as github from '@backstage/plugin-scaffolder-backend-module-github';\nimport * as gitlab from '@backstage/plugin-scaffolder-backend-module-gitlab';\nimport * as azure from '@backstage/plugin-scaffolder-backend-module-azure';\nimport * as bitbucket from '@backstage/plugin-scaffolder-backend-module-bitbucket';\nimport * as bitbucketCloud from '@backstage/plugin-scaffolder-backend-module-bitbucket-cloud';\nimport * as bitbucketServer from '@backstage/plugin-scaffolder-backend-module-bitbucket-server';\nimport * as gerrit from '@backstage/plugin-scaffolder-backend-module-gerrit';\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubActionsDispatchAction =\n github.createGithubActionsDispatchAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubDeployKeyAction = github.createGithubDeployKeyAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubEnvironmentAction =\n github.createGithubEnvironmentAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubIssuesLabelAction =\n github.createGithubIssuesLabelAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport type CreateGithubPullRequestActionOptions =\n github.CreateGithubPullRequestActionOptions;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubRepoCreateAction = github.createGithubRepoCreateAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubRepoPushAction = github.createGithubRepoPushAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createGithubWebhookAction = github.createGithubWebhookAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createPublishGithubAction = github.createPublishGithubAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-github` instead\n */\nexport const createPublishGithubPullRequestAction =\n github.createPublishGithubPullRequestAction;\n\n/**\n * @public @deprecated use \"createPublishBitbucketCloudAction\" from \\@backstage/plugin-scaffolder-backend-module-bitbucket-cloud or \"createPublishBitbucketServerAction\" from \\@backstage/plugin-scaffolder-backend-module-bitbucket-server instead\n */\nexport const createPublishBitbucketAction =\n bitbucket.createPublishBitbucketAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-bitbucket-cloud` instead\n */\nexport const createPublishBitbucketCloudAction =\n bitbucketCloud.createPublishBitbucketCloudAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-bitbucket-server` instead\n */\nexport const createPublishBitbucketServerAction =\n bitbucketServer.createPublishBitbucketServerAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-bitbucket-server` instead\n */\nexport const createPublishBitbucketServerPullRequestAction =\n bitbucketServer.createPublishBitbucketServerPullRequestAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-azure` instead\n */\nexport const createPublishAzureAction = azure.createPublishAzureAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-gerrit` instead\n */\nexport const createPublishGerritAction = gerrit.createPublishGerritAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-gerrit` instead\n */\nexport const createPublishGerritReviewAction =\n gerrit.createPublishGerritReviewAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-gitlab` instead\n */\nexport const createPublishGitlabAction = gitlab.createPublishGitlabAction;\n\n/**\n * @public\n * @deprecated use import from `@backstage/plugin-scaffolder-backend-module-gitlab` instead\n */\nexport const createPublishGitlabMergeRequestAction =\n gitlab.createPublishGitlabMergeRequestAction;\n","/*\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 ActionContext as ActionContextNode,\n createTemplateAction as createTemplateActionNode,\n TaskSecrets as TaskSecretsNode,\n TemplateAction as TemplateActionNode,\n executeShellCommand as executeShellCommandNode,\n ExecuteShellCommandOptions as ExecuteShellCommandOptionsNode,\n fetchContents as fetchContentsNode,\n} from '@backstage/plugin-scaffolder-node';\nimport { JsonObject } from '@backstage/types';\nimport { ScaffolderEntitiesProcessor as ScaffolderEntitiesProcessorModule } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model';\n\n/**\n * @public\n * @deprecated Import from {@link @backstage/plugin-scaffolder-node#ActionContext} instead\n */\nexport type ActionContext<TInput extends JsonObject> =\n ActionContextNode<TInput>;\n\n/**\n * @public\n * @deprecated Use `createTemplateAction` from `@backstage/plugin-scaffolder-node` instead\n */\nexport const createTemplateAction = createTemplateActionNode;\n\n/**\n * @public\n * @deprecated Use `TaskSecrets` from `@backstage/plugin-scaffolder-node` instead\n */\nexport type TaskSecrets = TaskSecretsNode;\n\n/**\n * @public\n * @deprecated Use `TemplateAction` from `@backstage/plugin-scaffolder-node` instead\n */\nexport type TemplateAction<TInput extends JsonObject> =\n TemplateActionNode<TInput>;\n\n/**\n * Options for {@link executeShellCommand}.\n *\n * @public\n * @deprecated Use `ExecuteShellCommandOptions` from `@backstage/plugin-scaffolder-node` instead\n */\nexport type RunCommandOptions = ExecuteShellCommandOptionsNode;\n\n/**\n * Run a command in a sub-process, normally a shell command.\n *\n * @public\n * @deprecated Use `executeShellCommand` from `@backstage/plugin-scaffolder-node` instead\n */\nexport const executeShellCommand = executeShellCommandNode;\n\n/**\n * A helper function that reads the contents of a directory from the given URL.\n * Can be used in your own actions, and also used behind fetch:template and fetch:plain\n *\n * @public\n * @deprecated Use `fetchContents` from `@backstage/plugin-scaffolder-node` instead\n */\nexport const fetchContents = fetchContentsNode;\n\n/**\n * Adds support for scaffolder specific entity kinds to the catalog.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-catalog-backend-module-scaffolder-entity-model` instead\n */\nexport const ScaffolderEntitiesProcessor = ScaffolderEntitiesProcessorModule;\n"],"names":["github","bitbucket","bitbucketCloud","bitbucketServer","azure","gerrit","gitlab","createTemplateActionNode","executeShellCommandNode","fetchContentsNode","ScaffolderEntitiesProcessorModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,MAAM,oCACXA,iBAAO,CAAA,kCAAA;AAMF,MAAM,8BAA8BA,iBAAO,CAAA,4BAAA;AAM3C,MAAM,gCACXA,iBAAO,CAAA,8BAAA;AAMF,MAAM,gCACXA,iBAAO,CAAA,8BAAA;AAaF,MAAM,+BAA+BA,iBAAO,CAAA,6BAAA;AAM5C,MAAM,6BAA6BA,iBAAO,CAAA,2BAAA;AAM1C,MAAM,4BAA4BA,iBAAO,CAAA,0BAAA;AAMzC,MAAM,4BAA4BA,iBAAO,CAAA,0BAAA;AAMzC,MAAM,uCACXA,iBAAO,CAAA,qCAAA;AAKF,MAAM,+BACXC,oBAAU,CAAA,6BAAA;AAML,MAAM,oCACXC,yBAAe,CAAA,kCAAA;AAMV,MAAM,qCACXC,0BAAgB,CAAA,mCAAA;AAMX,MAAM,gDACXA,0BAAgB,CAAA,8CAAA;AAMX,MAAM,2BAA2BC,gBAAM,CAAA,yBAAA;AAMvC,MAAM,4BAA4BC,iBAAO,CAAA,0BAAA;AAMzC,MAAM,kCACXA,iBAAO,CAAA,gCAAA;AAMF,MAAM,4BAA4BC,iBAAO,CAAA,0BAAA;AAMzC,MAAM,wCACXA,iBAAO,CAAA;;AC1GF,MAAM,oBAAuB,GAAAC,0CAAA;AA6B7B,MAAM,mBAAsB,GAAAC,yCAAA;AAS5B,MAAM,aAAgB,GAAAC,mCAAA;AAQtB,MAAM,2BAA8B,GAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ var isolatedVm = require('isolated-vm');
4
+ var backendPluginApi = require('@backstage/backend-plugin-api');
5
+ var fs = require('fs-extra');
6
+ var helpers = require('./helpers.cjs.js');
7
+
8
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
+
10
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
11
+
12
+ const mkScript = (nunjucksSource) => `
13
+ const { render, renderCompat } = (() => {
14
+ const module = {};
15
+ const process = { env: {} };
16
+ const require = (pkg) => { if (pkg === 'events') { return function (){}; }};
17
+
18
+ ${nunjucksSource}
19
+
20
+ const env = module.exports.configure({
21
+ autoescape: false,
22
+ ...JSON.parse(nunjucksConfigs),
23
+ tags: {
24
+ variableStart: '\${{',
25
+ variableEnd: '}}',
26
+ },
27
+ });
28
+
29
+ const compatEnv = module.exports.configure({
30
+ autoescape: false,
31
+ ...JSON.parse(nunjucksConfigs),
32
+ tags: {
33
+ variableStart: '{{',
34
+ variableEnd: '}}',
35
+ },
36
+ });
37
+ compatEnv.addFilter('jsonify', compatEnv.getFilter('dump'));
38
+
39
+ for (const name of JSON.parse(availableTemplateFilters)) {
40
+ env.addFilter(name, (...args) => JSON.parse(callFilter(name, args)));
41
+ }
42
+ for (const [name, value] of Object.entries(JSON.parse(availableTemplateGlobals))) {
43
+ env.addGlobal(name, value);
44
+ }
45
+ for (const name of JSON.parse(availableTemplateCallbacks)) {
46
+ env.addGlobal(name, (...args) => JSON.parse(callGlobal(name, args)));
47
+ }
48
+
49
+ let uninstallCompat = undefined;
50
+
51
+ function render(str, values) {
52
+ try {
53
+ if (uninstallCompat) {
54
+ uninstallCompat();
55
+ uninstallCompat = undefined;
56
+ }
57
+ return env.renderString(str, JSON.parse(values));
58
+ } catch (error) {
59
+ // Make sure errors don't leak anything
60
+ throw new Error(String(error.message));
61
+ }
62
+ }
63
+
64
+ function renderCompat(str, values) {
65
+ try {
66
+ if (!uninstallCompat) {
67
+ uninstallCompat = module.exports.installJinjaCompat();
68
+ }
69
+ return compatEnv.renderString(str, JSON.parse(values));
70
+ } catch (error) {
71
+ // Make sure errors don't leak anything
72
+ throw new Error(String(error.message));
73
+ }
74
+ }
75
+
76
+ return { render, renderCompat };
77
+ })();
78
+ `;
79
+ class SecureTemplater {
80
+ static async loadRenderer(options = {}) {
81
+ const {
82
+ cookiecutterCompat,
83
+ templateFilters = {},
84
+ templateGlobals = {},
85
+ nunjucksConfigs = {}
86
+ } = options;
87
+ const nodeVersion = helpers.getMajorNodeVersion();
88
+ if (nodeVersion >= 20 && !helpers.isNoNodeSnapshotOptionProvided()) {
89
+ throw new Error(
90
+ `When using Node.js version 20 or newer, the scaffolder backend plugin requires that it be started with the --no-node-snapshot option.
91
+ Please make sure that you have NODE_OPTIONS=--no-node-snapshot in your environment.`
92
+ );
93
+ }
94
+ const isolate = new isolatedVm.Isolate({ memoryLimit: 128 });
95
+ const context = await isolate.createContext();
96
+ const contextGlobal = context.global;
97
+ const nunjucksSource = await fs__default.default.readFile(
98
+ backendPluginApi.resolvePackagePath(
99
+ "@backstage/plugin-scaffolder-backend",
100
+ "assets/nunjucks.js.txt"
101
+ ),
102
+ "utf-8"
103
+ );
104
+ const nunjucksScript = await isolate.compileScript(
105
+ mkScript(nunjucksSource)
106
+ );
107
+ await contextGlobal.set("nunjucksConfigs", JSON.stringify(nunjucksConfigs));
108
+ const availableFilters = Object.keys(templateFilters);
109
+ await contextGlobal.set(
110
+ "availableTemplateFilters",
111
+ JSON.stringify(availableFilters)
112
+ );
113
+ const globalCallbacks = [];
114
+ const globalValues = {};
115
+ for (const [name, value] of Object.entries(templateGlobals)) {
116
+ if (typeof value === "function") {
117
+ globalCallbacks.push(name);
118
+ } else {
119
+ globalValues[name] = value;
120
+ }
121
+ }
122
+ await contextGlobal.set(
123
+ "availableTemplateGlobals",
124
+ JSON.stringify(globalValues)
125
+ );
126
+ await contextGlobal.set(
127
+ "availableTemplateCallbacks",
128
+ JSON.stringify(globalCallbacks)
129
+ );
130
+ await contextGlobal.set(
131
+ "callFilter",
132
+ (filterName, args) => {
133
+ if (!Object.hasOwn(templateFilters, filterName)) {
134
+ return "";
135
+ }
136
+ return JSON.stringify(templateFilters[filterName](...args));
137
+ }
138
+ );
139
+ await contextGlobal.set(
140
+ "callGlobal",
141
+ (globalName, args) => {
142
+ if (!Object.hasOwn(templateGlobals, globalName)) {
143
+ return "";
144
+ }
145
+ const global = templateGlobals[globalName];
146
+ if (typeof global !== "function") {
147
+ return "";
148
+ }
149
+ return JSON.stringify(global(...args));
150
+ }
151
+ );
152
+ await nunjucksScript.run(context);
153
+ const render = (template, values) => {
154
+ if (!context) {
155
+ throw new Error("SecureTemplater has not been initialized");
156
+ }
157
+ contextGlobal.setSync("templateStr", String(template));
158
+ contextGlobal.setSync("templateValues", JSON.stringify(values));
159
+ if (cookiecutterCompat) {
160
+ return context.evalSync(`renderCompat(templateStr, templateValues)`);
161
+ }
162
+ return context.evalSync(`render(templateStr, templateValues)`);
163
+ };
164
+ return render;
165
+ }
166
+ }
167
+
168
+ exports.SecureTemplater = SecureTemplater;
169
+ //# sourceMappingURL=SecureTemplater.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecureTemplater.cjs.js","sources":["../../../src/lib/templating/SecureTemplater.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 { Isolate } from 'isolated-vm';\nimport { resolvePackagePath } from '@backstage/backend-plugin-api';\nimport {\n TemplateFilter as _TemplateFilter,\n TemplateGlobal as _TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport fs from 'fs-extra';\nimport { JsonValue } from '@backstage/types';\nimport { getMajorNodeVersion, isNoNodeSnapshotOptionProvided } from './helpers';\n\n// language=JavaScript\nconst mkScript = (nunjucksSource: string) => `\nconst { render, renderCompat } = (() => {\n const module = {};\n const process = { env: {} };\n const require = (pkg) => { if (pkg === 'events') { return function (){}; }};\n\n ${nunjucksSource}\n\n const env = module.exports.configure({\n autoescape: false,\n ...JSON.parse(nunjucksConfigs),\n tags: {\n variableStart: '\\${{',\n variableEnd: '}}',\n },\n });\n\n const compatEnv = module.exports.configure({\n autoescape: false,\n ...JSON.parse(nunjucksConfigs),\n tags: {\n variableStart: '{{',\n variableEnd: '}}',\n },\n });\n compatEnv.addFilter('jsonify', compatEnv.getFilter('dump'));\n\n for (const name of JSON.parse(availableTemplateFilters)) {\n env.addFilter(name, (...args) => JSON.parse(callFilter(name, args)));\n }\n for (const [name, value] of Object.entries(JSON.parse(availableTemplateGlobals))) {\n env.addGlobal(name, value);\n }\n for (const name of JSON.parse(availableTemplateCallbacks)) {\n env.addGlobal(name, (...args) => JSON.parse(callGlobal(name, args)));\n }\n\n let uninstallCompat = undefined;\n\n function render(str, values) {\n try {\n if (uninstallCompat) {\n uninstallCompat();\n uninstallCompat = undefined;\n }\n return env.renderString(str, JSON.parse(values));\n } catch (error) {\n // Make sure errors don't leak anything\n throw new Error(String(error.message));\n }\n }\n\n function renderCompat(str, values) {\n try {\n if (!uninstallCompat) {\n uninstallCompat = module.exports.installJinjaCompat();\n }\n return compatEnv.renderString(str, JSON.parse(values));\n } catch (error) {\n // Make sure errors don't leak anything\n throw new Error(String(error.message));\n }\n }\n\n return { render, renderCompat };\n})();\n`;\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-scaffolder-node` instead.\n */\nexport type TemplateFilter = _TemplateFilter;\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-scaffolder-node` instead.\n */\nexport type TemplateGlobal = _TemplateGlobal;\n\ninterface SecureTemplaterOptions {\n /* Enables jinja compatibility and the \"jsonify\" filter */\n cookiecutterCompat?: boolean;\n /* Extra user-provided nunjucks filters */\n templateFilters?: Record<string, TemplateFilter>;\n /* Extra user-provided nunjucks globals */\n templateGlobals?: Record<string, TemplateGlobal>;\n nunjucksConfigs?: { trimBlocks?: boolean; lstripBlocks?: boolean };\n}\n\nexport type SecureTemplateRenderer = (\n template: string,\n values: unknown,\n) => string;\n\nexport class SecureTemplater {\n static async loadRenderer(options: SecureTemplaterOptions = {}) {\n const {\n cookiecutterCompat,\n templateFilters = {},\n templateGlobals = {},\n nunjucksConfigs = {},\n } = options;\n\n const nodeVersion = getMajorNodeVersion();\n if (nodeVersion >= 20 && !isNoNodeSnapshotOptionProvided()) {\n throw new Error(\n `When using Node.js version 20 or newer, the scaffolder backend plugin requires that it be started with the --no-node-snapshot option. \n Please make sure that you have NODE_OPTIONS=--no-node-snapshot in your environment.`,\n );\n }\n\n const isolate = new Isolate({ memoryLimit: 128 });\n const context = await isolate.createContext();\n const contextGlobal = context.global;\n\n const nunjucksSource = await fs.readFile(\n resolvePackagePath(\n '@backstage/plugin-scaffolder-backend',\n 'assets/nunjucks.js.txt',\n ),\n 'utf-8',\n );\n\n const nunjucksScript = await isolate.compileScript(\n mkScript(nunjucksSource),\n );\n\n await contextGlobal.set('nunjucksConfigs', JSON.stringify(nunjucksConfigs));\n\n const availableFilters = Object.keys(templateFilters);\n\n await contextGlobal.set(\n 'availableTemplateFilters',\n JSON.stringify(availableFilters),\n );\n\n const globalCallbacks = [];\n const globalValues: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(templateGlobals)) {\n if (typeof value === 'function') {\n globalCallbacks.push(name);\n } else {\n globalValues[name] = value;\n }\n }\n\n await contextGlobal.set(\n 'availableTemplateGlobals',\n JSON.stringify(globalValues),\n );\n await contextGlobal.set(\n 'availableTemplateCallbacks',\n JSON.stringify(globalCallbacks),\n );\n\n await contextGlobal.set(\n 'callFilter',\n (filterName: string, args: JsonValue[]) => {\n if (!Object.hasOwn(templateFilters, filterName)) {\n return '';\n }\n return JSON.stringify(templateFilters[filterName](...args));\n },\n );\n\n await contextGlobal.set(\n 'callGlobal',\n (globalName: string, args: JsonValue[]) => {\n if (!Object.hasOwn(templateGlobals, globalName)) {\n return '';\n }\n const global = templateGlobals[globalName];\n if (typeof global !== 'function') {\n return '';\n }\n return JSON.stringify(global(...args));\n },\n );\n\n await nunjucksScript.run(context);\n\n const render: SecureTemplateRenderer = (template, values) => {\n if (!context) {\n throw new Error('SecureTemplater has not been initialized');\n }\n\n contextGlobal.setSync('templateStr', String(template));\n contextGlobal.setSync('templateValues', JSON.stringify(values));\n\n if (cookiecutterCompat) {\n return context.evalSync(`renderCompat(templateStr, templateValues)`);\n }\n\n return context.evalSync(`render(templateStr, templateValues)`);\n };\n return render;\n }\n}\n"],"names":["getMajorNodeVersion","isNoNodeSnapshotOptionProvided","Isolate","fs","resolvePackagePath"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var catalogModel = require('@backstage/catalog-model');
4
+ var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
5
+ var get = require('lodash/get');
6
+
7
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
+
9
+ var get__default = /*#__PURE__*/_interopDefaultCompat(get);
10
+
11
+ const createDefaultFilters = ({
12
+ integrations
13
+ }) => {
14
+ return {
15
+ parseRepoUrl: (url) => pluginScaffolderNode.parseRepoUrl(url, integrations),
16
+ parseEntityRef: (ref, context) => catalogModel.parseEntityRef(ref, context),
17
+ pick: (obj, key) => get__default.default(obj, key),
18
+ projectSlug: (repoUrl) => {
19
+ const { owner, repo } = pluginScaffolderNode.parseRepoUrl(repoUrl, integrations);
20
+ return `${owner}/${repo}`;
21
+ }
22
+ };
23
+ };
24
+
25
+ exports.createDefaultFilters = createDefaultFilters;
26
+ //# sourceMappingURL=filters.cjs.js.map
@@ -0,0 +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,YAAA;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,CAAA;AACpE,MAAO,OAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AAAA,KACzB;AAAA,GACF,CAAA;AACF;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ function isNoNodeSnapshotOptionProvided() {
4
+ return process.env.NODE_OPTIONS?.includes("--no-node-snapshot") || process.argv.includes("--no-node-snapshot");
5
+ }
6
+ function getMajorNodeVersion() {
7
+ const version = process.versions.node;
8
+ return parseInt(version.split(".")[0], 10);
9
+ }
10
+
11
+ exports.getMajorNodeVersion = getMajorNodeVersion;
12
+ exports.isNoNodeSnapshotOptionProvided = isNoNodeSnapshotOptionProvided;
13
+ //# sourceMappingURL=helpers.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.cjs.js","sources":["../../../src/lib/templating/helpers.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\nexport function isNoNodeSnapshotOptionProvided(): boolean {\n return (\n process.env.NODE_OPTIONS?.includes('--no-node-snapshot') ||\n process.argv.includes('--no-node-snapshot')\n );\n}\n\n/**\n * Gets the major version of the currently running Node.js process.\n *\n * @remarks\n * This function extracts the major version from `process.versions.node` (a string representing the Node.js version),\n * which includes the major, minor, and patch versions. It splits this string by the `.` character to get an array\n * of these versions, and then parses the first element of this array (the major version) to a number.\n *\n * @returns {number} The major version of the currently running Node.js process.\n */\nexport function getMajorNodeVersion(): number {\n const version = process.versions.node;\n return parseInt(version.split('.')[0], 10);\n}\n"],"names":[],"mappings":";;AAgBO,SAAS,8BAA0C,GAAA;AACxD,EACE,OAAA,OAAA,CAAQ,IAAI,YAAc,EAAA,QAAA,CAAS,oBAAoB,CACvD,IAAA,OAAA,CAAQ,IAAK,CAAA,QAAA,CAAS,oBAAoB,CAAA,CAAA;AAE9C,CAAA;AAYO,SAAS,mBAA8B,GAAA;AAC5C,EAAM,MAAA,OAAA,GAAU,QAAQ,QAAS,CAAA,IAAA,CAAA;AACjC,EAAA,OAAO,SAAS,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,GAAG,EAAE,CAAA,CAAA;AAC3C;;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var errors = require('@backstage/errors');
4
+
5
+ class TemplateActionRegistry {
6
+ actions = /* @__PURE__ */ new Map();
7
+ register(action) {
8
+ if (this.actions.has(action.id)) {
9
+ throw new errors.ConflictError(
10
+ `Template action with ID '${action.id}' has already been registered`
11
+ );
12
+ }
13
+ this.actions.set(action.id, action);
14
+ }
15
+ get(actionId) {
16
+ const action = this.actions.get(actionId);
17
+ if (!action) {
18
+ throw new errors.NotFoundError(
19
+ `Template action with ID '${actionId}' is not registered.`
20
+ );
21
+ }
22
+ return action;
23
+ }
24
+ list() {
25
+ return [...this.actions.values()];
26
+ }
27
+ }
28
+
29
+ exports.TemplateActionRegistry = TemplateActionRegistry;
30
+ //# sourceMappingURL=TemplateActionRegistry.cjs.js.map
@@ -0,0 +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.`,\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,CAAA;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,CAAA;AAAA,OACvC,CAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,MAAO,CAAA,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,GACpC;AAAA,EAEA,IAAI,QAAkC,EAAA;AACpC,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIC,oBAAA;AAAA,QACR,4BAA4B,QAAQ,CAAA,oBAAA,CAAA;AAAA,OACtC,CAAA;AAAA,KACF;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAyB,GAAA;AACvB,IAAA,OAAO,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAAA,GAClC;AACF;;;;"}
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
4
+ var zod = require('zod');
5
+ var catalogModel = require('@backstage/catalog-model');
6
+ var fetch_examples = require('./fetch.examples.cjs.js');
7
+
8
+ const id = "catalog:fetch";
9
+ function createFetchCatalogEntityAction(options) {
10
+ const { catalogClient, auth } = options;
11
+ return pluginScaffolderNode.createTemplateAction({
12
+ id,
13
+ description: "Returns entity or entities from the catalog by entity reference(s)",
14
+ examples: fetch_examples.examples,
15
+ supportsDryRun: true,
16
+ schema: {
17
+ input: zod.z.object({
18
+ entityRef: zod.z.string({
19
+ description: "Entity reference of the entity to get"
20
+ }).optional(),
21
+ entityRefs: zod.z.array(zod.z.string(), {
22
+ description: "Entity references of the entities to get"
23
+ }).optional(),
24
+ optional: zod.z.boolean({
25
+ description: "Allow the entity or entities to optionally exist. Default: false"
26
+ }).optional(),
27
+ defaultKind: zod.z.string({ description: "The default kind" }).optional(),
28
+ defaultNamespace: zod.z.string({ description: "The default namespace" }).optional()
29
+ }),
30
+ output: zod.z.object({
31
+ entity: zod.z.any({
32
+ description: "Object containing same values used in the Entity schema. Only when used with `entityRef` parameter."
33
+ }).optional(),
34
+ entities: zod.z.array(
35
+ zod.z.any({
36
+ description: "Array containing objects with same values used in the Entity schema. Only when used with `entityRefs` parameter."
37
+ })
38
+ ).optional()
39
+ })
40
+ },
41
+ async handler(ctx) {
42
+ const { entityRef, entityRefs, optional, defaultKind, defaultNamespace } = ctx.input;
43
+ if (!entityRef && !entityRefs) {
44
+ if (optional) {
45
+ return;
46
+ }
47
+ throw new Error("Missing entity reference or references");
48
+ }
49
+ const { token } = await auth?.getPluginRequestToken({
50
+ onBehalfOf: await ctx.getInitiatorCredentials(),
51
+ targetPluginId: "catalog"
52
+ }) ?? { token: ctx.secrets?.backstageToken };
53
+ if (entityRef) {
54
+ const entity = await catalogClient.getEntityByRef(
55
+ catalogModel.stringifyEntityRef(
56
+ catalogModel.parseEntityRef(entityRef, { defaultKind, defaultNamespace })
57
+ ),
58
+ {
59
+ token
60
+ }
61
+ );
62
+ if (!entity && !optional) {
63
+ throw new Error(`Entity ${entityRef} not found`);
64
+ }
65
+ ctx.output("entity", entity ?? null);
66
+ }
67
+ if (entityRefs) {
68
+ const entities = await catalogClient.getEntitiesByRefs(
69
+ {
70
+ entityRefs: entityRefs.map(
71
+ (ref) => catalogModel.stringifyEntityRef(
72
+ catalogModel.parseEntityRef(ref, { defaultKind, defaultNamespace })
73
+ )
74
+ )
75
+ },
76
+ {
77
+ token
78
+ }
79
+ );
80
+ const finalEntities = entities.items.map((e, i) => {
81
+ if (!e && !optional) {
82
+ throw new Error(`Entity ${entityRefs[i]} not found`);
83
+ }
84
+ return e ?? null;
85
+ });
86
+ ctx.output("entities", finalEntities);
87
+ }
88
+ }
89
+ });
90
+ }
91
+
92
+ exports.createFetchCatalogEntityAction = createFetchCatalogEntityAction;
93
+ //# sourceMappingURL=fetch.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/catalog/fetch.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 { CatalogApi } from '@backstage/catalog-client';\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { z } from 'zod';\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { examples } from './fetch.examples';\nimport { AuthService } from '@backstage/backend-plugin-api';\n\nconst id = 'catalog:fetch';\n\n/**\n * Returns entity or entities from the catalog by entity reference(s).\n *\n * @public\n */\nexport function createFetchCatalogEntityAction(options: {\n catalogClient: CatalogApi;\n auth?: AuthService;\n}) {\n const { catalogClient, auth } = options;\n\n return createTemplateAction({\n id,\n description:\n 'Returns entity or entities from the catalog by entity reference(s)',\n examples,\n supportsDryRun: true,\n schema: {\n input: z.object({\n entityRef: z\n .string({\n description: 'Entity reference of the entity to get',\n })\n .optional(),\n entityRefs: z\n .array(z.string(), {\n description: 'Entity references of the entities to get',\n })\n .optional(),\n optional: z\n .boolean({\n description:\n 'Allow the entity or entities to optionally exist. Default: false',\n })\n .optional(),\n defaultKind: z.string({ description: 'The default kind' }).optional(),\n defaultNamespace: z\n .string({ description: 'The default namespace' })\n .optional(),\n }),\n output: z.object({\n entity: z\n .any({\n description:\n 'Object containing same values used in the Entity schema. Only when used with `entityRef` parameter.',\n })\n .optional(),\n entities: z\n .array(\n z.any({\n description:\n 'Array containing objects with same values used in the Entity schema. Only when used with `entityRefs` parameter.',\n }),\n )\n .optional(),\n }),\n },\n async handler(ctx) {\n const { entityRef, entityRefs, optional, defaultKind, defaultNamespace } =\n ctx.input;\n if (!entityRef && !entityRefs) {\n if (optional) {\n return;\n }\n throw new Error('Missing entity reference or references');\n }\n\n const { token } = (await auth?.getPluginRequestToken({\n onBehalfOf: await ctx.getInitiatorCredentials(),\n targetPluginId: 'catalog',\n })) ?? { token: ctx.secrets?.backstageToken };\n\n if (entityRef) {\n const entity = await catalogClient.getEntityByRef(\n stringifyEntityRef(\n parseEntityRef(entityRef, { defaultKind, defaultNamespace }),\n ),\n {\n token,\n },\n );\n\n if (!entity && !optional) {\n throw new Error(`Entity ${entityRef} not found`);\n }\n ctx.output('entity', entity ?? null);\n }\n\n if (entityRefs) {\n const entities = await catalogClient.getEntitiesByRefs(\n {\n entityRefs: entityRefs.map(ref =>\n stringifyEntityRef(\n parseEntityRef(ref, { defaultKind, defaultNamespace }),\n ),\n ),\n },\n {\n token,\n },\n );\n\n const finalEntities = entities.items.map((e, i) => {\n if (!e && !optional) {\n throw new Error(`Entity ${entityRefs[i]} not found`);\n }\n return e ?? null;\n });\n\n ctx.output('entities', finalEntities);\n }\n },\n });\n}\n"],"names":["createTemplateAction","examples","z","stringifyEntityRef","parseEntityRef"],"mappings":"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"}