@backstage/cli 0.13.1-next.1 → 0.14.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/config/eslint.backend.js +1 -12
  3. package/config/eslint.js +6 -17
  4. package/config/jest.js +4 -3
  5. package/config/jestSucraseTransform.js +60 -39
  6. package/dist/cjs/PackageGraph-d7b9d768.cjs.js +143 -0
  7. package/dist/cjs/backend-7919a693.cjs.js +36 -0
  8. package/dist/cjs/build-29fe454d.cjs.js +59 -0
  9. package/dist/cjs/{build-cda9d14b.cjs.js → build-30d6e823.cjs.js} +9 -4
  10. package/dist/cjs/build-8fe538f0.cjs.js +173 -0
  11. package/dist/cjs/{build-a0537ac0.cjs.js → build-ef788e26.cjs.js} +9 -4
  12. package/dist/cjs/buildBackend-1727e26d.cjs.js +84 -0
  13. package/dist/cjs/buildWorkspace-cdb5a92d.cjs.js +54 -0
  14. package/dist/cjs/bump-3e73eb63.cjs.js +348 -0
  15. package/dist/cjs/{build-0e234c9c.cjs.js → bundle-cfe3be2c.cjs.js} +10 -49
  16. package/dist/cjs/{bundle-82ebca5c.cjs.js → bundle-f5e5afd4.cjs.js} +16 -11
  17. package/dist/cjs/{clean-2a744d8e.cjs.js → clean-677131a4.cjs.js} +2 -2
  18. package/dist/cjs/{config-08b1d0e3.cjs.js → config-147bac17.cjs.js} +3 -3
  19. package/dist/cjs/{create-3c1059f8.cjs.js → create-95febe68.cjs.js} +4 -4
  20. package/dist/cjs/createDistWorkspace-59a08943.cjs.js +211 -0
  21. package/dist/cjs/{createPlugin-98d2404a.cjs.js → createPlugin-fd799616.cjs.js} +4 -4
  22. package/dist/cjs/{dev-35175ac8.cjs.js → dev-70024fd0.cjs.js} +8 -33
  23. package/dist/cjs/{diff-0f4d8b16.cjs.js → diff-4cf33d7e.cjs.js} +8 -8
  24. package/dist/cjs/{docs-1df9fa22.cjs.js → docs-1ce5cd6c.cjs.js} +7 -4
  25. package/dist/cjs/index-1823ab16.cjs.js +94 -0
  26. package/dist/cjs/{index-db3186f9.cjs.js → index-2b8588e8.cjs.js} +88 -59
  27. package/dist/cjs/{index-4fd2a731.cjs.js → index-9879526e.cjs.js} +2 -2
  28. package/dist/cjs/index-ba0436fb.cjs.js +125 -0
  29. package/dist/cjs/{info-0c58ae61.cjs.js → info-da6c4aef.cjs.js} +3 -3
  30. package/dist/cjs/{install-8bc1ba18.cjs.js → install-28e7640d.cjs.js} +4 -4
  31. package/dist/cjs/lint-985567f6.cjs.js +92 -0
  32. package/dist/cjs/{lint-9da50914.cjs.js → lint-a9e3c169.cjs.js} +3 -3
  33. package/dist/cjs/lint-ad2a1c74.cjs.js +35 -0
  34. package/dist/cjs/{build-f89d7092.cjs.js → oldBuild-a88f7903.cjs.js} +11 -6
  35. package/dist/cjs/{pack-8ef0a3ba.cjs.js → pack-b252bbb6.cjs.js} +2 -2
  36. package/dist/cjs/packageRole-5f116d95.cjs.js +54 -0
  37. package/dist/cjs/packageRoles-f375a99e.cjs.js +158 -0
  38. package/dist/cjs/packageScripts-890cd7af.cjs.js +97 -0
  39. package/dist/cjs/{packager-89d7686b.cjs.js → packager-8f82846e.cjs.js} +141 -58
  40. package/dist/cjs/{packages-fd09251d.cjs.js → packages-572642d7.cjs.js} +5 -4
  41. package/dist/cjs/parallel-d8e5bcbf.cjs.js +171 -0
  42. package/dist/cjs/{paths-f273ca03.cjs.js → paths-8e0b151d.cjs.js} +20 -19
  43. package/dist/cjs/{print-bd48d728.cjs.js → print-b7e68297.cjs.js} +7 -4
  44. package/dist/cjs/{run-448b5912.cjs.js → run-d3528c59.cjs.js} +2 -2
  45. package/dist/cjs/{schema-c5b2f512.cjs.js → schema-0d43bb71.cjs.js} +7 -4
  46. package/dist/cjs/{serve-32362ee1.cjs.js → serve-b7ae013f.cjs.js} +8 -8
  47. package/dist/cjs/{serve-b11d7c66.cjs.js → serve-cd62a6bb.cjs.js} +9 -9
  48. package/dist/cjs/{server-114c20ca.cjs.js → server-894abd58.cjs.js} +2 -2
  49. package/dist/cjs/svgrTemplate-b7a4ee52.cjs.js +21 -0
  50. package/dist/cjs/{tasks-f57f3a8c.cjs.js → tasks-f55f3d7e.cjs.js} +2 -2
  51. package/dist/cjs/{testCommand-a0ab3b2f.cjs.js → testCommand-f9b311fb.cjs.js} +11 -4
  52. package/dist/cjs/{validate-dfd64471.cjs.js → validate-cff0ae61.cjs.js} +7 -4
  53. package/dist/index.cjs.js +1 -1
  54. package/package.json +31 -22
  55. package/templates/default-backend-plugin/package.json.hbs +1 -1
  56. package/templates/default-plugin/package.json.hbs +1 -1
  57. package/dist/cjs/PackageGraph-7a0d3a83.cjs.js +0 -73
  58. package/dist/cjs/buildWorkspace-5494b433.cjs.js +0 -35
  59. package/dist/cjs/bump-ab6e31e7.cjs.js +0 -240
  60. package/dist/cjs/index-c868bb2d.cjs.js +0 -106
  61. package/dist/cjs/lint-f037ffc0.cjs.js +0 -29
  62. package/dist/cjs/parallel-7e32a8d0.cjs.js +0 -25
  63. package/dist/cjs/svgrTemplate-f19e974c.cjs.js +0 -25
@@ -4,7 +4,7 @@ var fs = require('fs-extra');
4
4
  var rollup = require('rollup');
5
5
  var chalk = require('chalk');
6
6
  var path = require('path');
7
- var index = require('./index-db3186f9.cjs.js');
7
+ var index = require('./index-2b8588e8.cjs.js');
8
8
  var peerDepsExternal = require('rollup-plugin-peer-deps-external');
9
9
  var commonjs = require('@rollup/plugin-commonjs');
10
10
  var resolve = require('@rollup/plugin-node-resolve');
@@ -15,7 +15,9 @@ var dts = require('rollup-plugin-dts');
15
15
  var json = require('@rollup/plugin-json');
16
16
  var yaml = require('@rollup/plugin-yaml');
17
17
  var rollupPluginutils = require('rollup-pluginutils');
18
- var svgrTemplate = require('./svgrTemplate-f19e974c.cjs.js');
18
+ var svgrTemplate = require('./svgrTemplate-b7a4ee52.cjs.js');
19
+ var parallel = require('./parallel-d8e5bcbf.cjs.js');
20
+ var packageRoles = require('./packageRoles-f375a99e.cjs.js');
19
21
 
20
22
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
23
 
@@ -96,13 +98,26 @@ var Output = /* @__PURE__ */ ((Output2) => {
96
98
  })(Output || {});
97
99
 
98
100
  async function makeRollupConfigs(options) {
101
+ var _a;
99
102
  const configs = new Array();
103
+ const targetDir = (_a = options.targetDir) != null ? _a : index.paths.targetDir;
104
+ const onwarn = ({ code, message }) => {
105
+ if (code === "EMPTY_BUNDLE") {
106
+ return;
107
+ }
108
+ if (options.logPrefix) {
109
+ console.log(options.logPrefix + message);
110
+ } else {
111
+ console.log(message);
112
+ }
113
+ };
114
+ const distDir = path.resolve(targetDir, "dist");
100
115
  if (options.outputs.has(Output.cjs) || options.outputs.has(Output.esm)) {
101
116
  const output = new Array();
102
117
  const mainFields = ["module", "main"];
103
118
  if (options.outputs.has(Output.cjs)) {
104
119
  output.push({
105
- dir: "dist",
120
+ dir: distDir,
106
121
  entryFileNames: "index.cjs.js",
107
122
  chunkFileNames: "cjs/[name]-[hash].cjs.js",
108
123
  format: "commonjs",
@@ -111,7 +126,7 @@ async function makeRollupConfigs(options) {
111
126
  }
112
127
  if (options.outputs.has(Output.esm)) {
113
128
  output.push({
114
- dir: "dist",
129
+ dir: distDir,
115
130
  entryFileNames: "index.esm.js",
116
131
  chunkFileNames: "esm/[name]-[hash].esm.js",
117
132
  format: "module",
@@ -120,12 +135,14 @@ async function makeRollupConfigs(options) {
120
135
  mainFields.unshift("browser");
121
136
  }
122
137
  configs.push({
123
- input: "src/index.ts",
138
+ input: path.resolve(targetDir, "src/index.ts"),
124
139
  output,
140
+ onwarn,
125
141
  preserveEntrySignatures: "strict",
126
142
  external: require("module").builtinModules,
127
143
  plugins: [
128
144
  peerDepsExternal__default["default"]({
145
+ packageJsonPath: path.resolve(targetDir, "package.json"),
129
146
  includeDependencies: true
130
147
  }),
131
148
  resolve__default["default"]({ mainFields }),
@@ -162,92 +179,128 @@ async function makeRollupConfigs(options) {
162
179
  });
163
180
  }
164
181
  if (options.outputs.has(Output.types) && !options.useApiExtractor) {
165
- const typesInput = index.paths.resolveTargetRoot("dist-types", path.relative(index.paths.targetRoot, index.paths.targetDir), "src/index.d.ts");
182
+ const typesInput = index.paths.resolveTargetRoot("dist-types", path.relative(index.paths.targetRoot, targetDir), "src/index.d.ts");
166
183
  const declarationsExist = await fs__default["default"].pathExists(typesInput);
167
184
  if (!declarationsExist) {
168
- const path$1 = path.relative(index.paths.targetDir, typesInput);
185
+ const path$1 = path.relative(targetDir, typesInput);
169
186
  throw new Error(`No declaration files found at ${path$1}, be sure to run ${chalk__default["default"].bgRed.white("yarn tsc")} to generate .d.ts files before packaging`);
170
187
  }
171
188
  configs.push({
172
189
  input: typesInput,
173
190
  output: {
174
- file: "dist/index.d.ts",
191
+ file: path.resolve(distDir, "index.d.ts"),
175
192
  format: "es"
176
193
  },
194
+ onwarn,
177
195
  plugins: [dts__default["default"]()]
178
196
  });
179
197
  }
180
198
  return configs;
181
199
  }
182
200
 
183
- const ignoredMessages = /* @__PURE__ */ new Set(["tsdoc-undefined-tag", "ae-forgotten-export"]);
184
- let apiExtractor;
185
- function prepareApiExtractor() {
186
- if (apiExtractor) {
187
- return apiExtractor;
188
- }
201
+ async function buildTypeDefinitionsWorker(workerData, sendMessage) {
189
202
  try {
190
- apiExtractor = require("@microsoft/api-extractor");
203
+ require("@microsoft/api-extractor");
191
204
  } catch (error) {
192
205
  throw new Error("Failed to resolve @microsoft/api-extractor, it must best installed as a dependency of your project in order to use experimental type builds");
193
206
  }
207
+ const { dirname } = require("path");
208
+ const { entryPoints, workerConfigs, typescriptCompilerFolder } = workerData;
209
+ const apiExtractor = require("@microsoft/api-extractor");
210
+ const { Extractor, ExtractorConfig, CompilerState } = apiExtractor;
194
211
  const {
195
212
  PackageJsonLookup
196
213
  } = require("@rushstack/node-core-library/lib/PackageJsonLookup");
197
214
  const old = PackageJsonLookup.prototype.tryGetPackageJsonFilePathFor;
198
- PackageJsonLookup.prototype.tryGetPackageJsonFilePathFor = function tryGetPackageJsonFilePathForPatch(path$1) {
199
- if (path$1.includes("@material-ui") && !path.dirname(path$1).endsWith("@material-ui")) {
215
+ PackageJsonLookup.prototype.tryGetPackageJsonFilePathFor = function tryGetPackageJsonFilePathForPatch(path) {
216
+ if (path.includes("@material-ui") && !dirname(path).endsWith("@material-ui")) {
200
217
  return void 0;
201
218
  }
202
- return old.call(this, path$1);
219
+ return old.call(this, path);
203
220
  };
204
- return apiExtractor;
205
- }
206
- async function buildTypeDefinitions() {
207
- const { Extractor, ExtractorConfig } = prepareApiExtractor();
208
- const distTypesPackageDir = index.paths.resolveTargetRoot("dist-types", path.relative(index.paths.targetRoot, index.paths.targetDir));
209
- const entryPoint = path.resolve(distTypesPackageDir, "src/index.d.ts");
210
- const declarationsExist = await fs__default["default"].pathExists(entryPoint);
211
- if (!declarationsExist) {
212
- const path$1 = path.relative(index.paths.targetDir, entryPoint);
213
- throw new Error(`No declaration files found at ${path$1}, be sure to run ${chalk__default["default"].bgRed.white("yarn tsc")} to generate .d.ts files before packaging`);
221
+ let compilerState;
222
+ for (const { extractorOptions, targetTypesDir } of workerConfigs) {
223
+ const extractorConfig = ExtractorConfig.prepare(extractorOptions);
224
+ if (!compilerState) {
225
+ compilerState = CompilerState.create(extractorConfig, {
226
+ additionalEntryPoints: entryPoints
227
+ });
228
+ }
229
+ const extractorResult = Extractor.invoke(extractorConfig, {
230
+ compilerState,
231
+ localBuild: false,
232
+ typescriptCompilerFolder,
233
+ showVerboseMessages: false,
234
+ showDiagnostics: false,
235
+ messageCallback: (message) => {
236
+ message.handled = true;
237
+ sendMessage({ message, targetTypesDir });
238
+ }
239
+ });
240
+ if (!extractorResult.succeeded) {
241
+ throw new Error(`Type definition build completed with ${extractorResult.errorCount} errors and ${extractorResult.warningCount} warnings`);
242
+ }
214
243
  }
215
- const extractorConfig = ExtractorConfig.prepare({
216
- configObject: {
217
- mainEntryPointFilePath: entryPoint,
218
- bundledPackages: [],
219
- compiler: {
220
- skipLibCheck: true,
221
- tsconfigFilePath: index.paths.resolveTargetRoot("tsconfig.json")
222
- },
223
- dtsRollup: {
224
- enabled: true,
225
- untrimmedFilePath: index.paths.resolveTarget("dist/index.alpha.d.ts"),
226
- betaTrimmedFilePath: index.paths.resolveTarget("dist/index.beta.d.ts"),
227
- publicTrimmedFilePath: index.paths.resolveTarget("dist/index.d.ts")
244
+ }
245
+
246
+ const ignoredMessages = /* @__PURE__ */ new Set(["tsdoc-undefined-tag", "ae-forgotten-export"]);
247
+ async function buildTypeDefinitions(targetDirs = [index.paths.targetDir]) {
248
+ const packageDirs = targetDirs.map((dir) => path.relative(index.paths.targetRoot, dir));
249
+ const entryPoints = await Promise.all(packageDirs.map(async (dir) => {
250
+ const entryPoint = index.paths.resolveTargetRoot("dist-types", dir, "src/index.d.ts");
251
+ const declarationsExist = await fs__default["default"].pathExists(entryPoint);
252
+ if (!declarationsExist) {
253
+ throw new Error(`No declaration files found at ${entryPoint}, be sure to run ${chalk__default["default"].bgRed.white("yarn tsc")} to generate .d.ts files before packaging`);
254
+ }
255
+ return entryPoint;
256
+ }));
257
+ const workerConfigs = packageDirs.map((packageDir) => {
258
+ const targetDir = index.paths.resolveTargetRoot(packageDir);
259
+ const targetTypesDir = index.paths.resolveTargetRoot("dist-types", packageDir);
260
+ const extractorOptions = {
261
+ configObject: {
262
+ mainEntryPointFilePath: path.resolve(targetTypesDir, "src/index.d.ts"),
263
+ bundledPackages: [],
264
+ compiler: {
265
+ skipLibCheck: true,
266
+ tsconfigFilePath: index.paths.resolveTargetRoot("tsconfig.json")
267
+ },
268
+ dtsRollup: {
269
+ enabled: true,
270
+ untrimmedFilePath: path.resolve(targetDir, "dist/index.alpha.d.ts"),
271
+ betaTrimmedFilePath: path.resolve(targetDir, "dist/index.beta.d.ts"),
272
+ publicTrimmedFilePath: path.resolve(targetDir, "dist/index.d.ts")
273
+ },
274
+ newlineKind: "lf",
275
+ projectFolder: targetDir
228
276
  },
229
- newlineKind: "lf",
230
- projectFolder: index.paths.targetDir
231
- },
232
- configObjectFullPath: index.paths.targetDir,
233
- packageJsonFullPath: index.paths.resolveTarget("package.json")
277
+ configObjectFullPath: targetDir,
278
+ packageJsonFullPath: path.resolve(targetDir, "package.json")
279
+ };
280
+ return { extractorOptions, targetTypesDir };
234
281
  });
235
282
  const typescriptDir = index.paths.resolveTargetRoot("node_modules/typescript");
236
283
  const hasTypescript = await fs__default["default"].pathExists(typescriptDir);
237
- const extractorResult = Extractor.invoke(extractorConfig, {
238
- typescriptCompilerFolder: hasTypescript ? typescriptDir : void 0,
239
- localBuild: false,
240
- showVerboseMessages: false,
241
- showDiagnostics: false,
242
- messageCallback(message) {
243
- message.handled = true;
284
+ const typescriptCompilerFolder = hasTypescript ? typescriptDir : void 0;
285
+ await parallel.runWorkerThreads({
286
+ threadCount: 1,
287
+ workerData: {
288
+ entryPoints,
289
+ workerConfigs,
290
+ typescriptCompilerFolder
291
+ },
292
+ worker: buildTypeDefinitionsWorker,
293
+ onMessage: ({
294
+ message,
295
+ targetTypesDir
296
+ }) => {
244
297
  if (ignoredMessages.has(message.messageId)) {
245
298
  return;
246
299
  }
247
300
  let text = `${message.text} (${message.messageId})`;
248
301
  if (message.sourceFilePath) {
249
302
  text += " at ";
250
- text += path.relative(distTypesPackageDir, message.sourceFilePath);
303
+ text += path.relative(targetTypesDir, message.sourceFilePath);
251
304
  if (message.sourceFileLine) {
252
305
  text += `:${message.sourceFileLine}`;
253
306
  if (message.sourceFileColumn) {
@@ -264,9 +317,6 @@ async function buildTypeDefinitions() {
264
317
  }
265
318
  }
266
319
  });
267
- if (!extractorResult.succeeded) {
268
- throw new Error(`Type definition build completed with ${extractorResult.errorCount} errors and ${extractorResult.warningCount} warnings`);
269
- }
270
320
  }
271
321
 
272
322
  function formatErrorMessage(error) {
@@ -346,7 +396,40 @@ const buildPackage = async (options) => {
346
396
  }
347
397
  await Promise.all(buildTasks);
348
398
  };
399
+ const buildPackages = async (options) => {
400
+ if (options.some((opt) => !opt.targetDir)) {
401
+ throw new Error("targetDir must be set for all build options");
402
+ }
403
+ const rollupConfigs = await Promise.all(options.map(makeRollupConfigs));
404
+ await Promise.all(options.map(({ targetDir }) => fs__default["default"].remove(path.resolve(targetDir, "dist"))));
405
+ const buildTasks = rollupConfigs.flat().map((opts) => () => rollupBuild(opts));
406
+ const typeDefinitionTargetDirs = options.filter(({ outputs, useApiExtractor }) => outputs.has(Output.types) && useApiExtractor).map((_) => _.targetDir);
407
+ if (typeDefinitionTargetDirs.length > 0) {
408
+ buildTasks.unshift(() => buildTypeDefinitions(typeDefinitionTargetDirs));
409
+ }
410
+ await parallel.runParallelWorkers({
411
+ items: buildTasks,
412
+ worker: async (task) => task()
413
+ });
414
+ };
415
+ function getOutputsForRole(role) {
416
+ const outputs = /* @__PURE__ */ new Set();
417
+ for (const output of packageRoles.getRoleInfo(role).output) {
418
+ if (output === "cjs") {
419
+ outputs.add(Output.cjs);
420
+ }
421
+ if (output === "esm") {
422
+ outputs.add(Output.esm);
423
+ }
424
+ if (output === "types") {
425
+ outputs.add(Output.types);
426
+ }
427
+ }
428
+ return outputs;
429
+ }
349
430
 
350
431
  exports.Output = Output;
351
432
  exports.buildPackage = buildPackage;
352
- //# sourceMappingURL=packager-89d7686b.cjs.js.map
433
+ exports.buildPackages = buildPackages;
434
+ exports.getOutputsForRole = getOutputsForRole;
435
+ //# sourceMappingURL=packager-8f82846e.cjs.js.map
@@ -2,8 +2,8 @@
2
2
 
3
3
  var minimatch = require('minimatch');
4
4
  var getPackages = require('@manypkg/get-packages');
5
- var run = require('./run-448b5912.cjs.js');
6
- var index = require('./index-db3186f9.cjs.js');
5
+ var run = require('./run-d3528c59.cjs.js');
6
+ var index = require('./index-2b8588e8.cjs.js');
7
7
 
8
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
9
 
@@ -28,7 +28,8 @@ async function fetchPackageInfo(name) {
28
28
  }
29
29
  async function mapDependencies(targetDir, pattern) {
30
30
  var _a;
31
- const { packages } = await getPackages.getPackages(targetDir);
31
+ const { packages, root } = await getPackages.getPackages(targetDir);
32
+ packages.push(root);
32
33
  const dependencyMap = /* @__PURE__ */ new Map();
33
34
  for (const pkg of packages) {
34
35
  const deps = DEP_TYPES.flatMap((t) => {
@@ -50,4 +51,4 @@ async function mapDependencies(targetDir, pattern) {
50
51
 
51
52
  exports.fetchPackageInfo = fetchPackageInfo;
52
53
  exports.mapDependencies = mapDependencies;
53
- //# sourceMappingURL=packages-fd09251d.cjs.js.map
54
+ //# sourceMappingURL=packages-572642d7.cjs.js.map
@@ -0,0 +1,171 @@
1
+ 'use strict';
2
+
3
+ var os = require('os');
4
+ var worker_threads = require('worker_threads');
5
+
6
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
+
8
+ var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
9
+
10
+ const defaultParallelism = Math.ceil(os__default["default"].cpus().length / 2);
11
+ const PARALLEL_ENV_VAR = "BACKSTAGE_CLI_BUILD_PARALLEL";
12
+ function parseParallelismOption(parallel) {
13
+ if (parallel === void 0 || parallel === null) {
14
+ return defaultParallelism;
15
+ } else if (typeof parallel === "boolean") {
16
+ return parallel ? defaultParallelism : 1;
17
+ } else if (typeof parallel === "number" && Number.isInteger(parallel)) {
18
+ if (parallel < 1) {
19
+ return 1;
20
+ }
21
+ return parallel;
22
+ } else if (typeof parallel === "string") {
23
+ if (parallel === "true") {
24
+ return parseParallelismOption(true);
25
+ } else if (parallel === "false") {
26
+ return parseParallelismOption(false);
27
+ }
28
+ const parsed = Number(parallel);
29
+ if (Number.isInteger(parsed)) {
30
+ return parseParallelismOption(parsed);
31
+ }
32
+ }
33
+ throw Error(`Parallel option value '${parallel}' is not a boolean or integer`);
34
+ }
35
+ function getEnvironmentParallelism() {
36
+ return parseParallelismOption(process.env[PARALLEL_ENV_VAR]);
37
+ }
38
+ async function runParallelWorkers(options) {
39
+ const { parallelismFactor = 1, parallelismSetting, items, worker } = options;
40
+ const parallelism = parallelismSetting ? parseParallelismOption(parallelismSetting) : getEnvironmentParallelism();
41
+ const sharedIterator = items[Symbol.iterator]();
42
+ const sharedIterable = {
43
+ [Symbol.iterator]: () => sharedIterator
44
+ };
45
+ const workerCount = Math.max(Math.floor(parallelismFactor * parallelism), 1);
46
+ return Promise.all(Array(workerCount).fill(0).map(async () => {
47
+ for (const value of sharedIterable) {
48
+ await worker(value);
49
+ }
50
+ }));
51
+ }
52
+ async function runWorkerQueueThreads(options) {
53
+ const items = Array.from(options.items);
54
+ const {
55
+ workerFactory,
56
+ workerData,
57
+ threadCount = Math.min(getEnvironmentParallelism(), items.length)
58
+ } = options;
59
+ const iterator = items[Symbol.iterator]();
60
+ const results = new Array();
61
+ let itemIndex = 0;
62
+ await Promise.all(Array(threadCount).fill(0).map(async () => {
63
+ const thread = new worker_threads.Worker(`(${workerQueueThread})(${workerFactory})`, {
64
+ eval: true,
65
+ workerData
66
+ });
67
+ return new Promise((resolve, reject) => {
68
+ thread.on("message", (message) => {
69
+ if (message.type === "start" || message.type === "result") {
70
+ if (message.type === "result") {
71
+ results[message.index] = message.result;
72
+ }
73
+ const { value, done } = iterator.next();
74
+ if (done) {
75
+ thread.postMessage({ type: "done" });
76
+ } else {
77
+ thread.postMessage({
78
+ type: "item",
79
+ index: itemIndex,
80
+ item: value
81
+ });
82
+ itemIndex += 1;
83
+ }
84
+ } else if (message.type === "error") {
85
+ const error = new Error(message.error.message);
86
+ error.name = message.error.name;
87
+ error.stack = message.error.stack;
88
+ reject(error);
89
+ }
90
+ });
91
+ thread.on("error", reject);
92
+ thread.on("exit", (code) => {
93
+ if (code !== 0) {
94
+ reject(new Error(`Worker thread exited with code ${code}`));
95
+ } else {
96
+ resolve();
97
+ }
98
+ });
99
+ });
100
+ }));
101
+ return results;
102
+ }
103
+ function workerQueueThread(workerFuncFactory) {
104
+ const { parentPort, workerData } = require("worker_threads");
105
+ Promise.resolve().then(() => workerFuncFactory(workerData)).then((workerFunc) => {
106
+ parentPort.on("message", async (message) => {
107
+ if (message.type === "done") {
108
+ parentPort.close();
109
+ return;
110
+ }
111
+ if (message.type === "item") {
112
+ try {
113
+ const result = await workerFunc(message.item);
114
+ parentPort.postMessage({
115
+ type: "result",
116
+ index: message.index,
117
+ result
118
+ });
119
+ } catch (error) {
120
+ parentPort.postMessage({ type: "error", error });
121
+ }
122
+ }
123
+ });
124
+ parentPort.postMessage({ type: "start" });
125
+ }, (error) => parentPort.postMessage({ type: "error", error }));
126
+ }
127
+ async function runWorkerThreads(options) {
128
+ const { worker, workerData, threadCount = 1, onMessage } = options;
129
+ return Promise.all(Array(threadCount).fill(0).map(async () => {
130
+ const thread = new worker_threads.Worker(`(${workerThread})(${worker})`, {
131
+ eval: true,
132
+ workerData
133
+ });
134
+ return new Promise((resolve, reject) => {
135
+ thread.on("message", (message) => {
136
+ if (message.type === "result") {
137
+ resolve(message.result);
138
+ } else if (message.type === "error") {
139
+ reject(message.error);
140
+ } else if (message.type === "message") {
141
+ onMessage == null ? void 0 : onMessage(message.message);
142
+ }
143
+ });
144
+ thread.on("error", reject);
145
+ thread.on("exit", (code) => {
146
+ reject(new Error(`Unexpected worker thread exit with code ${code}`));
147
+ });
148
+ });
149
+ }));
150
+ }
151
+ function workerThread(workerFunc) {
152
+ const { parentPort, workerData } = require("worker_threads");
153
+ const sendMessage = (message) => {
154
+ parentPort.postMessage({ type: "message", message });
155
+ };
156
+ workerFunc(workerData, sendMessage).then((result) => {
157
+ parentPort.postMessage({
158
+ type: "result",
159
+ index: 0,
160
+ result
161
+ });
162
+ }, (error) => {
163
+ parentPort.postMessage({ type: "error", error });
164
+ });
165
+ }
166
+
167
+ exports.getEnvironmentParallelism = getEnvironmentParallelism;
168
+ exports.runParallelWorkers = runParallelWorkers;
169
+ exports.runWorkerQueueThreads = runWorkerQueueThreads;
170
+ exports.runWorkerThreads = runWorkerThreads;
171
+ //# sourceMappingURL=parallel-d8e5bcbf.cjs.js.map
@@ -12,9 +12,9 @@ var nodeExternals = require('webpack-node-externals');
12
12
  var cliCommon = require('@backstage/cli-common');
13
13
  var getPackages = require('@manypkg/get-packages');
14
14
  var MiniCssExtractPlugin = require('mini-css-extract-plugin');
15
- var svgrTemplate = require('./svgrTemplate-f19e974c.cjs.js');
16
- var index = require('./index-db3186f9.cjs.js');
17
- var run = require('./run-448b5912.cjs.js');
15
+ var svgrTemplate = require('./svgrTemplate-b7a4ee52.cjs.js');
16
+ var index = require('./index-2b8588e8.cjs.js');
17
+ var run = require('./run-d3528c59.cjs.js');
18
18
  var ESLintPlugin = require('eslint-webpack-plugin');
19
19
  var pickBy = require('lodash/pickBy');
20
20
 
@@ -38,7 +38,8 @@ const optimization = (options) => {
38
38
  minimize: !isDev,
39
39
  minimizer: [
40
40
  new ESBuildMinifyPlugin({
41
- target: "es2019"
41
+ target: "es2019",
42
+ format: "iife"
42
43
  })
43
44
  ],
44
45
  runtimeChunk: "single",
@@ -262,7 +263,7 @@ async function createConfig(paths, options) {
262
263
  const validBaseUrl = new URL(baseUrl);
263
264
  if (checksEnabled) {
264
265
  plugins.push(new ForkTsCheckerWebpackPlugin__default["default"]({
265
- typescript: { configFile: paths.targetTsConfig }
266
+ typescript: { configFile: paths.targetTsConfig, memoryLimit: 4096 }
266
267
  }), new ESLintPlugin__default["default"]({
267
268
  context: paths.targetPath,
268
269
  files: ["**", "!**/__tests__/**", "!**/?(*.)(spec|test).*"]
@@ -473,40 +474,40 @@ function nodeExternalsWithResolve(options) {
473
474
  }
474
475
 
475
476
  function resolveBundlingPaths(options) {
476
- const { entry } = options;
477
+ const { entry, targetDir = index.paths.targetDir } = options;
477
478
  const resolveTargetModule = (pathString) => {
478
479
  for (const ext of ["mjs", "js", "ts", "tsx", "jsx"]) {
479
- const filePath = index.paths.resolveTarget(`${pathString}.${ext}`);
480
+ const filePath = path.resolve(targetDir, `${pathString}.${ext}`);
480
481
  if (fs__default["default"].pathExistsSync(filePath)) {
481
482
  return filePath;
482
483
  }
483
484
  }
484
- return index.paths.resolveTarget(`${pathString}.js`);
485
+ return path.resolve(targetDir, `${pathString}.js`);
485
486
  };
486
487
  let targetPublic = void 0;
487
- let targetHtml = index.paths.resolveTarget("public/index.html");
488
+ let targetHtml = path.resolve(targetDir, "public/index.html");
488
489
  if (fs__default["default"].pathExistsSync(targetHtml)) {
489
- targetPublic = index.paths.resolveTarget("public");
490
+ targetPublic = path.resolve(targetDir, "public");
490
491
  } else {
491
- targetHtml = index.paths.resolveTarget(`${entry}.html`);
492
+ targetHtml = path.resolve(targetDir, `${entry}.html`);
492
493
  if (!fs__default["default"].pathExistsSync(targetHtml)) {
493
494
  targetHtml = index.paths.resolveOwn("templates/serve_index.html");
494
495
  }
495
496
  }
496
- const targetRunFile = index.paths.resolveTarget("src/run.ts");
497
+ const targetRunFile = path.resolve(targetDir, "src/run.ts");
497
498
  const runFileExists = fs__default["default"].pathExistsSync(targetRunFile);
498
499
  return {
499
500
  targetHtml,
500
501
  targetPublic,
501
- targetPath: index.paths.resolveTarget("."),
502
+ targetPath: path.resolve(targetDir, "."),
502
503
  targetRunFile: runFileExists ? targetRunFile : void 0,
503
- targetDist: index.paths.resolveTarget("dist"),
504
- targetAssets: index.paths.resolveTarget("assets"),
505
- targetSrc: index.paths.resolveTarget("src"),
506
- targetDev: index.paths.resolveTarget("dev"),
504
+ targetDist: path.resolve(targetDir, "dist"),
505
+ targetAssets: path.resolve(targetDir, "assets"),
506
+ targetSrc: path.resolve(targetDir, "src"),
507
+ targetDev: path.resolve(targetDir, "dev"),
507
508
  targetEntry: resolveTargetModule(entry),
508
509
  targetTsConfig: index.paths.resolveTargetRoot("tsconfig.json"),
509
- targetPackageJson: index.paths.resolveTarget("package.json"),
510
+ targetPackageJson: path.resolve(targetDir, "package.json"),
510
511
  rootNodeModules: index.paths.resolveTargetRoot("node_modules"),
511
512
  root: index.paths.targetRoot
512
513
  };
@@ -516,4 +517,4 @@ exports.createBackendConfig = createBackendConfig;
516
517
  exports.createConfig = createConfig;
517
518
  exports.resolveBaseUrl = resolveBaseUrl;
518
519
  exports.resolveBundlingPaths = resolveBundlingPaths;
519
- //# sourceMappingURL=paths-f273ca03.cjs.js.map
520
+ //# sourceMappingURL=paths-8e0b151d.cjs.js.map
@@ -2,9 +2,9 @@
2
2
 
3
3
  var yaml = require('yaml');
4
4
  var config$1 = require('@backstage/config');
5
- var config = require('./config-08b1d0e3.cjs.js');
5
+ var config = require('./config-147bac17.cjs.js');
6
6
  require('@backstage/config-loader');
7
- require('./index-db3186f9.cjs.js');
7
+ require('./index-2b8588e8.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('fs-extra');
@@ -13,7 +13,10 @@ require('@backstage/cli-common');
13
13
  require('@backstage/config/package.json');
14
14
  require('@backstage/errors');
15
15
  require('@manypkg/get-packages');
16
- require('./PackageGraph-7a0d3a83.cjs.js');
16
+ require('./PackageGraph-d7b9d768.cjs.js');
17
+ require('path');
18
+ require('child_process');
19
+ require('util');
17
20
 
18
21
  var print = async (cmd) => {
19
22
  const { schema, appConfigs } = await config.loadCliConfig({
@@ -59,4 +62,4 @@ function serializeConfigData(appConfigs, schema, visibility) {
59
62
  }
60
63
 
61
64
  exports["default"] = print;
62
- //# sourceMappingURL=print-bd48d728.cjs.js.map
65
+ //# sourceMappingURL=print-b7e68297.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var child_process = require('child_process');
4
- var index = require('./index-db3186f9.cjs.js');
4
+ var index = require('./index-2b8588e8.cjs.js');
5
5
  var util = require('util');
6
6
  var errors = require('@backstage/errors');
7
7
 
@@ -78,4 +78,4 @@ async function waitForExit(child, name) {
78
78
  exports.run = run;
79
79
  exports.runCheck = runCheck;
80
80
  exports.runPlain = runPlain;
81
- //# sourceMappingURL=run-448b5912.cjs.js.map
81
+ //# sourceMappingURL=run-d3528c59.cjs.js.map
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var yaml = require('yaml');
4
- var config = require('./config-08b1d0e3.cjs.js');
4
+ var config = require('./config-147bac17.cjs.js');
5
5
  var configLoader = require('@backstage/config-loader');
6
6
  require('@backstage/config');
7
- require('./index-db3186f9.cjs.js');
7
+ require('./index-2b8588e8.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('fs-extra');
@@ -13,7 +13,10 @@ require('@backstage/cli-common');
13
13
  require('@backstage/config/package.json');
14
14
  require('@backstage/errors');
15
15
  require('@manypkg/get-packages');
16
- require('./PackageGraph-7a0d3a83.cjs.js');
16
+ require('./PackageGraph-d7b9d768.cjs.js');
17
+ require('path');
18
+ require('child_process');
19
+ require('util');
17
20
 
18
21
  var schema = async (cmd) => {
19
22
  const { schema } = await config.loadCliConfig({
@@ -34,4 +37,4 @@ var schema = async (cmd) => {
34
37
  };
35
38
 
36
39
  exports["default"] = schema;
37
- //# sourceMappingURL=schema-c5b2f512.cjs.js.map
40
+ //# sourceMappingURL=schema-0d43bb71.cjs.js.map