@backstage/plugin-scaffolder-backend 1.22.0 → 1.22.1
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 +8 -0
- package/alpha/package.json +1 -1
- package/dist/alpha.cjs.js +2 -2
- package/dist/cjs/{router-77345506.cjs.js → router-B0mT63g8.cjs.js} +57 -58
- package/dist/cjs/{router-77345506.cjs.js.map → router-B0mT63g8.cjs.js.map} +1 -1
- package/dist/index.cjs.js +11 -13
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder-backend
|
|
2
2
|
|
|
3
|
+
## 1.22.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/plugin-catalog-node@1.9.0
|
|
9
|
+
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.12
|
|
10
|
+
|
|
3
11
|
## 1.22.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
package/alpha/package.json
CHANGED
package/dist/alpha.cjs.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var alpha = require('@backstage/plugin-scaffolder-common/alpha');
|
|
6
6
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
7
|
-
var router = require('./cjs/router-
|
|
7
|
+
var router = require('./cjs/router-B0mT63g8.cjs.js');
|
|
8
8
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
9
9
|
var backendCommon = require('@backstage/backend-common');
|
|
10
10
|
var integration = require('@backstage/integration');
|
|
@@ -174,7 +174,7 @@ const scaffolderPlugin = backendPluginApi.createBackendPlugin({
|
|
|
174
174
|
|
|
175
175
|
exports.createScaffolderActionConditionalDecision = createScaffolderActionConditionalDecision;
|
|
176
176
|
exports.createScaffolderTemplateConditionalDecision = createScaffolderTemplateConditionalDecision;
|
|
177
|
-
exports
|
|
177
|
+
exports.default = scaffolderPlugin;
|
|
178
178
|
exports.scaffolderActionConditions = scaffolderActionConditions;
|
|
179
179
|
exports.scaffolderTemplateConditions = scaffolderTemplateConditions;
|
|
180
180
|
//# sourceMappingURL=alpha.cjs.js.map
|
|
@@ -41,10 +41,10 @@ var pluginPermissionCommon = require('@backstage/plugin-permission-common');
|
|
|
41
41
|
var url = require('url');
|
|
42
42
|
var os = require('os');
|
|
43
43
|
|
|
44
|
-
function
|
|
44
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
45
45
|
|
|
46
|
-
function
|
|
47
|
-
if (e && e
|
|
46
|
+
function _interopNamespaceCompat(e) {
|
|
47
|
+
if (e && typeof e === 'object' && 'default' in e) return e;
|
|
48
48
|
var n = Object.create(null);
|
|
49
49
|
if (e) {
|
|
50
50
|
Object.keys(e).forEach(function (k) {
|
|
@@ -57,28 +57,27 @@ function _interopNamespace(e) {
|
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
-
n
|
|
60
|
+
n.default = e;
|
|
61
61
|
return Object.freeze(n);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
var express__default = /*#__PURE__*/
|
|
65
|
-
var Router__default = /*#__PURE__*/
|
|
66
|
-
var
|
|
67
|
-
var
|
|
68
|
-
var
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var
|
|
72
|
-
var
|
|
73
|
-
var
|
|
74
|
-
var
|
|
75
|
-
var
|
|
76
|
-
var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
|
|
64
|
+
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
65
|
+
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
|
|
66
|
+
var yaml__namespace = /*#__PURE__*/_interopNamespaceCompat(yaml);
|
|
67
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
68
|
+
var path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
69
|
+
var globby__default = /*#__PURE__*/_interopDefaultCompat(globby);
|
|
70
|
+
var get__default = /*#__PURE__*/_interopDefaultCompat(get);
|
|
71
|
+
var ObservableImpl__default = /*#__PURE__*/_interopDefaultCompat(ObservableImpl);
|
|
72
|
+
var PQueue__default = /*#__PURE__*/_interopDefaultCompat(PQueue);
|
|
73
|
+
var winston__namespace = /*#__PURE__*/_interopNamespaceCompat(winston);
|
|
74
|
+
var nunjucks__default = /*#__PURE__*/_interopDefaultCompat(nunjucks);
|
|
75
|
+
var os__default = /*#__PURE__*/_interopDefaultCompat(os);
|
|
77
76
|
|
|
78
77
|
const examples$9 = [
|
|
79
78
|
{
|
|
80
79
|
description: "Register with the catalog",
|
|
81
|
-
example:
|
|
80
|
+
example: yaml__namespace.default.stringify({
|
|
82
81
|
steps: [
|
|
83
82
|
{
|
|
84
83
|
action: "catalog:register",
|
|
@@ -277,7 +276,7 @@ function createCatalogWriteAction() {
|
|
|
277
276
|
ctx.logger.info(`Writing catalog-info.yaml`);
|
|
278
277
|
const { filePath, entity } = ctx.input;
|
|
279
278
|
const path = filePath != null ? filePath : "catalog-info.yaml";
|
|
280
|
-
await fs__default
|
|
279
|
+
await fs__default.default.writeFile(
|
|
281
280
|
backendCommon.resolveSafeChildPath(ctx.workspacePath, path),
|
|
282
281
|
yaml__namespace.stringify(entity)
|
|
283
282
|
);
|
|
@@ -288,7 +287,7 @@ function createCatalogWriteAction() {
|
|
|
288
287
|
const examples$7 = [
|
|
289
288
|
{
|
|
290
289
|
description: "Fetch entity by reference",
|
|
291
|
-
example:
|
|
290
|
+
example: yaml__namespace.default.stringify({
|
|
292
291
|
steps: [
|
|
293
292
|
{
|
|
294
293
|
action: "catalog:fetch",
|
|
@@ -303,7 +302,7 @@ const examples$7 = [
|
|
|
303
302
|
},
|
|
304
303
|
{
|
|
305
304
|
description: "Fetch multiple entities by reference",
|
|
306
|
-
example:
|
|
305
|
+
example: yaml__namespace.default.stringify({
|
|
307
306
|
steps: [
|
|
308
307
|
{
|
|
309
308
|
action: "catalog:fetch",
|
|
@@ -406,7 +405,7 @@ function createFetchCatalogEntityAction(options) {
|
|
|
406
405
|
const examples$6 = [
|
|
407
406
|
{
|
|
408
407
|
description: "Write a debug message",
|
|
409
|
-
example:
|
|
408
|
+
example: yaml__namespace.default.stringify({
|
|
410
409
|
steps: [
|
|
411
410
|
{
|
|
412
411
|
action: "debug:log",
|
|
@@ -421,7 +420,7 @@ const examples$6 = [
|
|
|
421
420
|
},
|
|
422
421
|
{
|
|
423
422
|
description: "List the workspace directory",
|
|
424
|
-
example:
|
|
423
|
+
example: yaml__namespace.default.stringify({
|
|
425
424
|
steps: [
|
|
426
425
|
{
|
|
427
426
|
action: "debug:log",
|
|
@@ -491,7 +490,7 @@ async function recursiveReadDir(dir) {
|
|
|
491
490
|
const examples$5 = [
|
|
492
491
|
{
|
|
493
492
|
description: "Waiting for 50 milliseconds",
|
|
494
|
-
example:
|
|
493
|
+
example: yaml__namespace.default.stringify({
|
|
495
494
|
steps: [
|
|
496
495
|
{
|
|
497
496
|
action: "debug:wait",
|
|
@@ -506,7 +505,7 @@ const examples$5 = [
|
|
|
506
505
|
},
|
|
507
506
|
{
|
|
508
507
|
description: "Waiting for 5 seconds",
|
|
509
|
-
example:
|
|
508
|
+
example: yaml__namespace.default.stringify({
|
|
510
509
|
steps: [
|
|
511
510
|
{
|
|
512
511
|
action: "debug:wait",
|
|
@@ -521,7 +520,7 @@ const examples$5 = [
|
|
|
521
520
|
},
|
|
522
521
|
{
|
|
523
522
|
description: "Waiting for 1 minutes",
|
|
524
|
-
example:
|
|
523
|
+
example: yaml__namespace.default.stringify({
|
|
525
524
|
steps: [
|
|
526
525
|
{
|
|
527
526
|
action: "debug:wait",
|
|
@@ -599,7 +598,7 @@ function createWaitAction(options) {
|
|
|
599
598
|
const examples$4 = [
|
|
600
599
|
{
|
|
601
600
|
description: "Downloads content and places it in the workspace.",
|
|
602
|
-
example:
|
|
601
|
+
example: yaml__namespace.default.stringify({
|
|
603
602
|
steps: [
|
|
604
603
|
{
|
|
605
604
|
action: "fetch:plain",
|
|
@@ -614,7 +613,7 @@ const examples$4 = [
|
|
|
614
613
|
},
|
|
615
614
|
{
|
|
616
615
|
description: "Optionally, if you would prefer the data to be downloaded to a subdirectory in the workspace you may specify the \u2018targetPath\u2019 input option.",
|
|
617
|
-
example:
|
|
616
|
+
example: yaml__namespace.default.stringify({
|
|
618
617
|
steps: [
|
|
619
618
|
{
|
|
620
619
|
action: "fetch:plain",
|
|
@@ -681,7 +680,7 @@ function createFetchPlainAction(options) {
|
|
|
681
680
|
const examples$3 = [
|
|
682
681
|
{
|
|
683
682
|
description: "Downloads a file and places it in the workspace.",
|
|
684
|
-
example:
|
|
683
|
+
example: yaml__namespace.default.stringify({
|
|
685
684
|
steps: [
|
|
686
685
|
{
|
|
687
686
|
action: "fetch:plain:file",
|
|
@@ -840,7 +839,7 @@ class SecureTemplater {
|
|
|
840
839
|
const isolate = new isolatedVm.Isolate({ memoryLimit: 128 });
|
|
841
840
|
const context = await isolate.createContext();
|
|
842
841
|
const contextGlobal = context.global;
|
|
843
|
-
const nunjucksSource = await fs__default
|
|
842
|
+
const nunjucksSource = await fs__default.default.readFile(
|
|
844
843
|
backendCommon.resolvePackagePath(
|
|
845
844
|
"@backstage/plugin-scaffolder-backend",
|
|
846
845
|
"assets/nunjucks.js.txt"
|
|
@@ -917,7 +916,7 @@ const createDefaultFilters = ({
|
|
|
917
916
|
return {
|
|
918
917
|
parseRepoUrl: (url) => pluginScaffolderNode.parseRepoUrl(url, integrations),
|
|
919
918
|
parseEntityRef: (ref, context) => catalogModel.parseEntityRef(ref, context),
|
|
920
|
-
pick: (obj, key) => get__default
|
|
919
|
+
pick: (obj, key) => get__default.default(obj, key),
|
|
921
920
|
projectSlug: (repoUrl) => {
|
|
922
921
|
const { owner, repo } = pluginScaffolderNode.parseRepoUrl(repoUrl, integrations);
|
|
923
922
|
return `${owner}/${repo}`;
|
|
@@ -928,7 +927,7 @@ const createDefaultFilters = ({
|
|
|
928
927
|
const examples$2 = [
|
|
929
928
|
{
|
|
930
929
|
description: "Downloads a skeleton directory that lives alongside the template file and fill it out with values.",
|
|
931
|
-
example:
|
|
930
|
+
example: yaml__namespace.default.stringify({
|
|
932
931
|
steps: [
|
|
933
932
|
{
|
|
934
933
|
action: "fetch:template",
|
|
@@ -1072,7 +1071,7 @@ function createFetchTemplateAction(options) {
|
|
|
1072
1071
|
token: ctx.input.token
|
|
1073
1072
|
});
|
|
1074
1073
|
ctx.logger.info("Listing files and directories in template");
|
|
1075
|
-
const allEntriesInTemplate = await globby__default
|
|
1074
|
+
const allEntriesInTemplate = await globby__default.default(`**/*`, {
|
|
1076
1075
|
cwd: templateDir,
|
|
1077
1076
|
dot: true,
|
|
1078
1077
|
onlyFiles: false,
|
|
@@ -1080,7 +1079,7 @@ function createFetchTemplateAction(options) {
|
|
|
1080
1079
|
followSymbolicLinks: false
|
|
1081
1080
|
});
|
|
1082
1081
|
const nonTemplatedEntries = new Set(
|
|
1083
|
-
await globby__default
|
|
1082
|
+
await globby__default.default(copyOnlyPatterns || [], {
|
|
1084
1083
|
cwd: templateDir,
|
|
1085
1084
|
dot: true,
|
|
1086
1085
|
onlyFiles: false,
|
|
@@ -1129,7 +1128,7 @@ function createFetchTemplateAction(options) {
|
|
|
1129
1128
|
continue;
|
|
1130
1129
|
}
|
|
1131
1130
|
const outputPath = backendCommon.resolveSafeChildPath(outputDir, localOutputPath);
|
|
1132
|
-
if (fs__default
|
|
1131
|
+
if (fs__default.default.existsSync(outputPath) && !ctx.input.replace) {
|
|
1133
1132
|
continue;
|
|
1134
1133
|
}
|
|
1135
1134
|
if (!renderContents && !extension) {
|
|
@@ -1141,22 +1140,22 @@ function createFetchTemplateAction(options) {
|
|
|
1141
1140
|
ctx.logger.info(
|
|
1142
1141
|
`Writing directory ${location} to template output path.`
|
|
1143
1142
|
);
|
|
1144
|
-
await fs__default
|
|
1143
|
+
await fs__default.default.ensureDir(outputPath);
|
|
1145
1144
|
} else {
|
|
1146
1145
|
const inputFilePath = backendCommon.resolveSafeChildPath(templateDir, location);
|
|
1147
|
-
const stats = await fs__default
|
|
1146
|
+
const stats = await fs__default.default.promises.lstat(inputFilePath);
|
|
1148
1147
|
if (stats.isSymbolicLink() || await isbinaryfile.isBinaryFile(inputFilePath)) {
|
|
1149
1148
|
ctx.logger.info(
|
|
1150
1149
|
`Copying file binary or symbolic link at ${location}, to template output path.`
|
|
1151
1150
|
);
|
|
1152
|
-
await fs__default
|
|
1151
|
+
await fs__default.default.copy(inputFilePath, outputPath);
|
|
1153
1152
|
} else {
|
|
1154
|
-
const statsObj = await fs__default
|
|
1153
|
+
const statsObj = await fs__default.default.stat(inputFilePath);
|
|
1155
1154
|
ctx.logger.info(
|
|
1156
1155
|
`Writing file ${location} to template output path with mode ${statsObj.mode}.`
|
|
1157
1156
|
);
|
|
1158
|
-
const inputFileContents = await fs__default
|
|
1159
|
-
await fs__default
|
|
1157
|
+
const inputFileContents = await fs__default.default.readFile(inputFilePath, "utf-8");
|
|
1158
|
+
await fs__default.default.outputFile(
|
|
1160
1159
|
outputPath,
|
|
1161
1160
|
renderContents ? renderTemplate(inputFileContents, context) : inputFileContents,
|
|
1162
1161
|
{ mode: statsObj.mode }
|
|
@@ -1220,7 +1219,7 @@ const createFilesystemDeleteAction = () => {
|
|
|
1220
1219
|
for (const file of ctx.input.files) {
|
|
1221
1220
|
const filepath = backendCommon.resolveSafeChildPath(ctx.workspacePath, file);
|
|
1222
1221
|
try {
|
|
1223
|
-
await fs__default
|
|
1222
|
+
await fs__default.default.remove(filepath);
|
|
1224
1223
|
ctx.logger.info(`File ${filepath} deleted successfully`);
|
|
1225
1224
|
} catch (err) {
|
|
1226
1225
|
ctx.logger.error(`Failed to delete file ${filepath}:`, err);
|
|
@@ -1305,7 +1304,7 @@ const createFilesystemRenameAction = () => {
|
|
|
1305
1304
|
);
|
|
1306
1305
|
const destFilepath = backendCommon.resolveSafeChildPath(ctx.workspacePath, file.to);
|
|
1307
1306
|
try {
|
|
1308
|
-
await fs__default
|
|
1307
|
+
await fs__default.default.move(sourceFilepath, destFilepath, {
|
|
1309
1308
|
overwrite: (_b = file.overwrite) != null ? _b : false
|
|
1310
1309
|
});
|
|
1311
1310
|
ctx.logger.info(
|
|
@@ -2121,7 +2120,7 @@ class StorageTaskBroker {
|
|
|
2121
2120
|
* {@inheritdoc TaskBroker.event$}
|
|
2122
2121
|
*/
|
|
2123
2122
|
event$(options) {
|
|
2124
|
-
return new ObservableImpl__default
|
|
2123
|
+
return new ObservableImpl__default.default((observer) => {
|
|
2125
2124
|
const { taskId } = options;
|
|
2126
2125
|
let after = options.after;
|
|
2127
2126
|
let cancelled = false;
|
|
@@ -2469,7 +2468,7 @@ class NunjucksWorkflowRunner {
|
|
|
2469
2468
|
}
|
|
2470
2469
|
isSingleTemplateString(input) {
|
|
2471
2470
|
var _a, _b;
|
|
2472
|
-
const { parser, nodes } = nunjucks__default
|
|
2471
|
+
const { parser, nodes } = nunjucks__default.default;
|
|
2473
2472
|
const parsed = parser.parse(
|
|
2474
2473
|
input,
|
|
2475
2474
|
{},
|
|
@@ -2660,7 +2659,7 @@ class NunjucksWorkflowRunner {
|
|
|
2660
2659
|
}
|
|
2661
2660
|
},
|
|
2662
2661
|
createTemporaryDirectory: async () => {
|
|
2663
|
-
const tmpDir = await fs__default
|
|
2662
|
+
const tmpDir = await fs__default.default.mkdtemp(
|
|
2664
2663
|
`${workspacePath}_step-${step.id}-`
|
|
2665
2664
|
);
|
|
2666
2665
|
tmpDirs.push(tmpDir);
|
|
@@ -2682,7 +2681,7 @@ class NunjucksWorkflowRunner {
|
|
|
2682
2681
|
});
|
|
2683
2682
|
}
|
|
2684
2683
|
for (const tmpDir of tmpDirs) {
|
|
2685
|
-
await fs__default
|
|
2684
|
+
await fs__default.default.remove(tmpDir);
|
|
2686
2685
|
}
|
|
2687
2686
|
context.steps[step.id] = { output: stepOutput };
|
|
2688
2687
|
if (task.cancelSignal.aborted) {
|
|
@@ -2701,7 +2700,7 @@ class NunjucksWorkflowRunner {
|
|
|
2701
2700
|
"Wrong template version executed with the workflow engine"
|
|
2702
2701
|
);
|
|
2703
2702
|
}
|
|
2704
|
-
const workspacePath = path__default
|
|
2703
|
+
const workspacePath = path__default.default.join(
|
|
2705
2704
|
this.options.workingDirectory,
|
|
2706
2705
|
await task.getWorkspaceName()
|
|
2707
2706
|
);
|
|
@@ -2715,7 +2714,7 @@ class NunjucksWorkflowRunner {
|
|
|
2715
2714
|
});
|
|
2716
2715
|
try {
|
|
2717
2716
|
const taskTrack = await this.tracker.taskStart(task);
|
|
2718
|
-
await fs__default
|
|
2717
|
+
await fs__default.default.ensureDir(workspacePath);
|
|
2719
2718
|
const context = {
|
|
2720
2719
|
parameters: task.spec.parameters,
|
|
2721
2720
|
steps: {},
|
|
@@ -2741,7 +2740,7 @@ class NunjucksWorkflowRunner {
|
|
|
2741
2740
|
return { output };
|
|
2742
2741
|
} finally {
|
|
2743
2742
|
if (workspacePath) {
|
|
2744
|
-
await fs__default
|
|
2743
|
+
await fs__default.default.remove(workspacePath);
|
|
2745
2744
|
}
|
|
2746
2745
|
}
|
|
2747
2746
|
}
|
|
@@ -2893,7 +2892,7 @@ class TaskWorker {
|
|
|
2893
2892
|
__publicField(this, "stopWorkers");
|
|
2894
2893
|
this.stopWorkers = false;
|
|
2895
2894
|
this.logger = options.logger;
|
|
2896
|
-
this.taskQueue = new PQueue__default
|
|
2895
|
+
this.taskQueue = new PQueue__default.default({
|
|
2897
2896
|
concurrency: options.concurrentTasksLimit
|
|
2898
2897
|
});
|
|
2899
2898
|
}
|
|
@@ -3077,18 +3076,18 @@ function createDryRunner(options) {
|
|
|
3077
3076
|
output: result.output
|
|
3078
3077
|
};
|
|
3079
3078
|
} finally {
|
|
3080
|
-
await fs__default
|
|
3079
|
+
await fs__default.default.remove(contentsPath);
|
|
3081
3080
|
}
|
|
3082
3081
|
};
|
|
3083
3082
|
}
|
|
3084
3083
|
|
|
3085
3084
|
async function getWorkingDirectory(config, logger) {
|
|
3086
3085
|
if (!config.has("backend.workingDirectory")) {
|
|
3087
|
-
return os__default
|
|
3086
|
+
return os__default.default.tmpdir();
|
|
3088
3087
|
}
|
|
3089
3088
|
const workingDirectory = config.getString("backend.workingDirectory");
|
|
3090
3089
|
try {
|
|
3091
|
-
await fs__default
|
|
3090
|
+
await fs__default.default.access(workingDirectory, fs__default.default.constants.F_OK | fs__default.default.constants.W_OK);
|
|
3092
3091
|
logger.info(`using working directory: ${workingDirectory}`);
|
|
3093
3092
|
} catch (err) {
|
|
3094
3093
|
errors.assertError(err);
|
|
@@ -3191,8 +3190,8 @@ const readDuration = (config$1, key, defaultValue) => {
|
|
|
3191
3190
|
};
|
|
3192
3191
|
async function createRouter(options) {
|
|
3193
3192
|
var _a;
|
|
3194
|
-
const router = Router__default
|
|
3195
|
-
router.use(express__default
|
|
3193
|
+
const router = Router__default.default();
|
|
3194
|
+
router.use(express__default.default.json({ limit: "10MB" }));
|
|
3196
3195
|
const {
|
|
3197
3196
|
logger: parentLogger,
|
|
3198
3197
|
config,
|
|
@@ -3588,7 +3587,7 @@ data: ${JSON.stringify(event)}
|
|
|
3588
3587
|
}))
|
|
3589
3588
|
});
|
|
3590
3589
|
});
|
|
3591
|
-
const app = express__default
|
|
3590
|
+
const app = express__default.default();
|
|
3592
3591
|
app.set("logger", logger);
|
|
3593
3592
|
app.use("/", router);
|
|
3594
3593
|
async function authorizeTemplate(entityRef, token, credentials) {
|
|
@@ -3645,4 +3644,4 @@ exports.createRouter = createRouter;
|
|
|
3645
3644
|
exports.createWaitAction = createWaitAction;
|
|
3646
3645
|
exports.scaffolderActionRules = scaffolderActionRules;
|
|
3647
3646
|
exports.scaffolderTemplateRules = scaffolderTemplateRules;
|
|
3648
|
-
//# sourceMappingURL=router-
|
|
3647
|
+
//# sourceMappingURL=router-B0mT63g8.cjs.js.map
|