@backstage/cli 0.28.0-next.0 → 0.28.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.
- package/CHANGELOG.md +48 -0
- package/config/jest.js +123 -69
- package/config/jestCacheResultProcessor.cjs +23 -0
- package/config/jestSwcTransform.js +4 -1
- package/dist/commands/build/buildBackend.cjs.js +65 -0
- package/dist/commands/build/buildFrontend.cjs.js +56 -0
- package/dist/commands/build/command.cjs.js +72 -0
- package/dist/commands/build/index.cjs.js +8 -0
- package/dist/commands/buildWorkspace.cjs.js +24 -0
- package/dist/commands/clean/clean.cjs.js +19 -0
- package/dist/{cjs/docs-CDE82fWG.cjs.js → commands/config/docs.cjs.js} +4 -12
- package/dist/{cjs/print-BX8-7Nzg.cjs.js → commands/config/print.cjs.js} +4 -12
- package/dist/{cjs/schema-Cabm6I6c.cjs.js → commands/config/schema.cjs.js} +4 -12
- package/dist/commands/config/validate.cjs.js +19 -0
- package/dist/{cjs/index-DVDDx3pk.cjs.js → commands/create-github-app/GithubCreateAppServer.cjs.js} +2 -110
- package/dist/commands/create-github-app/index.cjs.js +117 -0
- package/dist/commands/index.cjs.js +231 -0
- package/dist/{cjs/info-CB7ln5K_.cjs.js → commands/info.cjs.js} +13 -17
- package/dist/{cjs/lint-6_0f9f26.cjs.js → commands/lint.cjs.js} +10 -10
- package/dist/commands/migrate/packageExports.cjs.js +17 -0
- package/dist/{cjs/packageLintConfigs-BBvQehRd.cjs.js → commands/migrate/packageLintConfigs.cjs.js} +2 -10
- package/dist/{cjs/packageRole-CkpKfhJA.cjs.js → commands/migrate/packageRole.cjs.js} +5 -8
- package/dist/{cjs/packageScripts-DX6dilK6.cjs.js → commands/migrate/packageScripts.cjs.js} +1 -1
- package/dist/{cjs/reactRouterDeps-CR-hjviw.cjs.js → commands/migrate/reactRouterDeps.cjs.js} +1 -1
- package/dist/commands/new/new.cjs.js +101 -0
- package/dist/commands/pack.cjs.js +29 -0
- package/dist/commands/repo/build.cjs.js +113 -0
- package/dist/{cjs/clean-bdpRw-oZ.cjs.js → commands/repo/clean.cjs.js} +5 -10
- package/dist/{cjs/fix-BTjof5XT.cjs.js → commands/repo/fix.cjs.js} +8 -13
- package/dist/commands/repo/lint.cjs.js +193 -0
- package/dist/{cjs/list-deprecations-DFgQENam.cjs.js → commands/repo/list-deprecations.cjs.js} +7 -12
- package/dist/commands/repo/optionsParser.cjs.js +37 -0
- package/dist/commands/repo/test.cjs.js +274 -0
- package/dist/commands/start/command.cjs.js +48 -0
- package/dist/commands/start/index.cjs.js +8 -0
- package/dist/commands/start/startBackend.cjs.js +112 -0
- package/dist/commands/start/startFrontend.cjs.js +47 -0
- package/dist/{cjs/test-YJMOGqXG.cjs.js → commands/test.cjs.js} +6 -12
- package/dist/{cjs/bump-d9dS56p9.cjs.js → commands/versions/bump.cjs.js} +21 -190
- package/dist/commands/versions/migrate.cjs.js +112 -0
- package/dist/index.cjs.js +29 -7
- package/dist/lib/builder/config.cjs.js +199 -0
- package/dist/lib/builder/packager.cjs.js +131 -0
- package/dist/lib/builder/plugins.cjs.js +71 -0
- package/dist/lib/builder/types.cjs.js +11 -0
- package/dist/lib/bundler/LinkedPackageResolvePlugin.cjs.js +47 -0
- package/dist/lib/bundler/backend.cjs.js +36 -0
- package/dist/{cjs/buildBackend-DXvz7jvh.cjs.js → lib/bundler/bundle.cjs.js} +26 -113
- package/dist/lib/bundler/config.cjs.js +469 -0
- package/dist/lib/bundler/hasReactDomClient.cjs.js +13 -0
- package/dist/lib/bundler/moduleFederation.cjs.js +28 -0
- package/dist/lib/bundler/optimization.cjs.js +63 -0
- package/dist/lib/bundler/packageDetection.cjs.js +117 -0
- package/dist/lib/bundler/paths.cjs.js +60 -0
- package/dist/lib/bundler/server.cjs.js +246 -0
- package/dist/lib/bundler/transforms.cjs.js +171 -0
- package/dist/lib/codeowners/codeowners.cjs.js +92 -0
- package/dist/{cjs/config-nCB2LQK-.cjs.js → lib/config.cjs.js} +6 -6
- package/dist/{cjs/entryPoints-CoHH4lBA.cjs.js → lib/entryPoints.cjs.js} +4 -1
- package/dist/lib/errors.cjs.js +45 -0
- package/dist/lib/experimental/IpcServer.cjs.js +60 -0
- package/dist/lib/experimental/ServerDataStore.cjs.js +36 -0
- package/dist/lib/experimental/startBackendExperimental.cjs.js +128 -0
- package/dist/lib/new/FactoryRegistry.cjs.js +96 -0
- package/dist/lib/new/factories/backendModule.cjs.js +82 -0
- package/dist/lib/new/factories/backendPlugin.cjs.js +78 -0
- package/dist/lib/new/factories/common/prompts.cjs.js +57 -0
- package/dist/lib/new/factories/common/tasks.cjs.js +66 -0
- package/dist/lib/new/factories/common/util.cjs.js +16 -0
- package/dist/lib/new/factories/frontendPlugin.cjs.js +107 -0
- package/dist/lib/new/factories/index.cjs.js +24 -0
- package/dist/lib/new/factories/nodeLibraryPackage.cjs.js +57 -0
- package/dist/lib/new/factories/pluginCommon.cjs.js +58 -0
- package/dist/lib/new/factories/pluginNode.cjs.js +58 -0
- package/dist/lib/new/factories/pluginWeb.cjs.js +58 -0
- package/dist/lib/new/factories/scaffolderModule.cjs.js +90 -0
- package/dist/lib/new/factories/webLibraryPackage.cjs.js +57 -0
- package/dist/lib/new/types.cjs.js +8 -0
- package/dist/lib/packager/createDistWorkspace.cjs.js +219 -0
- package/dist/{cjs/productionPack-Dfl28j3c.cjs.js → lib/packager/productionPack.cjs.js} +8 -96
- package/dist/{cjs/parallel-BszNaKyc.cjs.js → lib/parallel.cjs.js} +2 -1
- package/dist/lib/paths.cjs.js +8 -0
- package/dist/{cjs/publishing-DQtsKTbc.cjs.js → lib/publishing.cjs.js} +1 -1
- package/dist/{cjs/role-e0emQj8q.cjs.js → lib/role.cjs.js} +3 -3
- package/dist/{cjs/run-HW3lfDbM.cjs.js → lib/run.cjs.js} +6 -5
- package/dist/{cjs/svgrTemplate-BTjBQ3by.cjs.js → lib/svgrTemplate.cjs.js} +1 -1
- package/dist/lib/tasks.cjs.js +188 -0
- package/dist/lib/typeDistProject.cjs.js +94 -0
- package/dist/lib/urls.cjs.js +13 -0
- package/dist/lib/version.cjs.js +86 -0
- package/dist/{cjs/yarn-6FNAgNBK.cjs.js → lib/versioning/Lockfile.cjs.js} +1 -31
- package/dist/lib/versioning/packages.cjs.js +75 -0
- package/dist/lib/yarn.cjs.js +34 -0
- package/dist/packages/backend-defaults/package.json.cjs.js +6 -0
- package/dist/packages/backend-plugin-api/package.json.cjs.js +6 -0
- package/dist/packages/backend-test-utils/package.json.cjs.js +6 -0
- package/dist/packages/cli/package.json.cjs.js +159 -0
- package/dist/packages/config/package.json.cjs.js +6 -0
- package/dist/packages/core-app-api/package.json.cjs.js +6 -0
- package/dist/packages/core-components/package.json.cjs.js +6 -0
- package/dist/packages/core-plugin-api/package.json.cjs.js +6 -0
- package/dist/packages/dev-utils/package.json.cjs.js +6 -0
- package/dist/packages/test-utils/package.json.cjs.js +6 -0
- package/dist/packages/theme/package.json.cjs.js +6 -0
- package/dist/plugins/auth-backend/package.json.cjs.js +6 -0
- package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +6 -0
- package/dist/plugins/scaffolder-node/package.json.cjs.js +6 -0
- package/package.json +23 -23
- package/dist/cjs/build-gNEKjjhr.cjs.js +0 -194
- package/dist/cjs/buildWorkspace-DLfI3EjD.cjs.js +0 -53
- package/dist/cjs/clean-Dpgqc3P2.cjs.js +0 -22
- package/dist/cjs/createDistWorkspace-DKzy-L-f.cjs.js +0 -576
- package/dist/cjs/index-7LxfekFu.cjs.js +0 -625
- package/dist/cjs/index-DsP5wbju.cjs.js +0 -131
- package/dist/cjs/index-v57xnvgT.cjs.js +0 -520
- package/dist/cjs/lint-DYO_SeK3.cjs.js +0 -91
- package/dist/cjs/moduleFederation-Dq0n1quT.cjs.js +0 -910
- package/dist/cjs/new-C0D_k25O.cjs.js +0 -1043
- package/dist/cjs/pack-D8AK7Uem.cjs.js +0 -34
- package/dist/cjs/packageExports-bg4mFuFZ.cjs.js +0 -27
- package/dist/cjs/test-5bQM0VRL.cjs.js +0 -126
- package/dist/cjs/validate-DKBlShmI.cjs.js +0 -28
- /package/templates/default-backend-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-backend-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-common-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-node-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-react-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/node-library-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/scaffolder-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/web-library-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @backstage/cli
|
|
2
2
|
|
|
3
|
+
## 0.28.0-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ea16633: Preserve directory structure for CommonJS build output, just like ESM. This makes the build output more stable and easier to browse, and allows for more effective tree shaking and lazy imports.
|
|
8
|
+
- 7955f9b: Tweaked the new package feature detection to not be active when building backend packages.
|
|
9
|
+
- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`.
|
|
10
|
+
- 2c5ecf5: Support `--max-warnings` flag for package linting
|
|
11
|
+
- 8fe740d: Added a new `--successCache` option to the `backstage-cli repo test` and `backstage-cli repo lint` commands. The cache keeps track of successful runs and avoids re-running for individual packages if they haven't changed. This option is intended only to be used in CI.
|
|
12
|
+
|
|
13
|
+
In addition a `--successCacheDir <path>` option has also been added to be able to override the default cache directory.
|
|
14
|
+
|
|
15
|
+
- f0514c7: Disabled parsing of input source maps in the SWC transform for Jest.
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
- @backstage/cli-node@0.2.9-next.0
|
|
18
|
+
- @backstage/eslint-plugin@0.1.10-next.1
|
|
19
|
+
- @backstage/integration@1.15.1-next.1
|
|
20
|
+
- @backstage/catalog-model@1.7.0
|
|
21
|
+
- @backstage/cli-common@0.1.14
|
|
22
|
+
- @backstage/config@1.2.0
|
|
23
|
+
- @backstage/config-loader@1.9.1
|
|
24
|
+
- @backstage/errors@1.2.4
|
|
25
|
+
- @backstage/release-manifests@0.0.11
|
|
26
|
+
- @backstage/types@1.1.1
|
|
27
|
+
|
|
28
|
+
## 0.28.0-next.1
|
|
29
|
+
|
|
30
|
+
### Minor Changes
|
|
31
|
+
|
|
32
|
+
- 55b8b84: **BREAKING**: The Jest configuration defined at `@backstage/cli/config/jest` no longer collects configuration defined in the `"jest"` field from all parent `package.json` files. Instead, it will only read and merge configuration from the `package.json` in the monorepo root if it exists, as well as the target package. In addition, configuration defined in the root `package.json` will now only be merged into each package configuration if it is a valid project-level configuration key.
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- 03810d2: Remove unknown dependency `diff`
|
|
37
|
+
- cebee4f: Added support for a new experimental `EXPERIMENTAL_TRIM_NEXT_ENTRY` flag which removes any `./next` entry points present in packages when building and publishing.
|
|
38
|
+
- 55b8b84: The Jest configuration will now search for a `src/setupTests.*` file with any valid script extension, not only `.ts`.
|
|
39
|
+
- Updated dependencies
|
|
40
|
+
- @backstage/eslint-plugin@0.1.10-next.0
|
|
41
|
+
- @backstage/integration@1.15.1-next.0
|
|
42
|
+
- @backstage/catalog-model@1.7.0
|
|
43
|
+
- @backstage/cli-common@0.1.14
|
|
44
|
+
- @backstage/cli-node@0.2.8
|
|
45
|
+
- @backstage/config@1.2.0
|
|
46
|
+
- @backstage/config-loader@1.9.1
|
|
47
|
+
- @backstage/errors@1.2.4
|
|
48
|
+
- @backstage/release-manifests@0.0.11
|
|
49
|
+
- @backstage/types@1.1.1
|
|
50
|
+
|
|
3
51
|
## 0.28.0-next.0
|
|
4
52
|
|
|
5
53
|
### Minor Changes
|
package/config/jest.js
CHANGED
|
@@ -19,6 +19,9 @@ const path = require('path');
|
|
|
19
19
|
const crypto = require('crypto');
|
|
20
20
|
const glob = require('util').promisify(require('glob'));
|
|
21
21
|
const { version } = require('../package.json');
|
|
22
|
+
const paths = require('@backstage/cli-common').findPaths(process.cwd());
|
|
23
|
+
|
|
24
|
+
const SRC_EXTS = ['ts', 'js', 'tsx', 'jsx', 'mts', 'cts', 'mjs', 'cjs'];
|
|
22
25
|
|
|
23
26
|
const envOptions = {
|
|
24
27
|
oldTests: Boolean(process.env.BACKSTAGE_OLD_TESTS),
|
|
@@ -31,6 +34,75 @@ try {
|
|
|
31
34
|
/* ignored */
|
|
32
35
|
}
|
|
33
36
|
|
|
37
|
+
/**
|
|
38
|
+
* A list of config keys that are valid for project-level config.
|
|
39
|
+
* Jest will complain if we forward any other root configuration to the projects.
|
|
40
|
+
*
|
|
41
|
+
* @type {Array<keyof import('@jest/types').Config.ProjectConfig>}
|
|
42
|
+
*/
|
|
43
|
+
const projectConfigKeys = [
|
|
44
|
+
'automock',
|
|
45
|
+
'cache',
|
|
46
|
+
'cacheDirectory',
|
|
47
|
+
'clearMocks',
|
|
48
|
+
'collectCoverageFrom',
|
|
49
|
+
'coverageDirectory',
|
|
50
|
+
'coveragePathIgnorePatterns',
|
|
51
|
+
'cwd',
|
|
52
|
+
'dependencyExtractor',
|
|
53
|
+
'detectLeaks',
|
|
54
|
+
'detectOpenHandles',
|
|
55
|
+
'displayName',
|
|
56
|
+
'errorOnDeprecated',
|
|
57
|
+
'extensionsToTreatAsEsm',
|
|
58
|
+
'fakeTimers',
|
|
59
|
+
'filter',
|
|
60
|
+
'forceCoverageMatch',
|
|
61
|
+
'globalSetup',
|
|
62
|
+
'globalTeardown',
|
|
63
|
+
'globals',
|
|
64
|
+
'haste',
|
|
65
|
+
'id',
|
|
66
|
+
'injectGlobals',
|
|
67
|
+
'moduleDirectories',
|
|
68
|
+
'moduleFileExtensions',
|
|
69
|
+
'moduleNameMapper',
|
|
70
|
+
'modulePathIgnorePatterns',
|
|
71
|
+
'modulePaths',
|
|
72
|
+
'openHandlesTimeout',
|
|
73
|
+
'preset',
|
|
74
|
+
'prettierPath',
|
|
75
|
+
'resetMocks',
|
|
76
|
+
'resetModules',
|
|
77
|
+
'resolver',
|
|
78
|
+
'restoreMocks',
|
|
79
|
+
'rootDir',
|
|
80
|
+
'roots',
|
|
81
|
+
'runner',
|
|
82
|
+
'runtime',
|
|
83
|
+
'sandboxInjectedGlobals',
|
|
84
|
+
'setupFiles',
|
|
85
|
+
'setupFilesAfterEnv',
|
|
86
|
+
'skipFilter',
|
|
87
|
+
'skipNodeResolution',
|
|
88
|
+
'slowTestThreshold',
|
|
89
|
+
'snapshotResolver',
|
|
90
|
+
'snapshotSerializers',
|
|
91
|
+
'snapshotFormat',
|
|
92
|
+
'testEnvironment',
|
|
93
|
+
'testEnvironmentOptions',
|
|
94
|
+
'testMatch',
|
|
95
|
+
'testLocationInResults',
|
|
96
|
+
'testPathIgnorePatterns',
|
|
97
|
+
'testRegex',
|
|
98
|
+
'testRunner',
|
|
99
|
+
'transform',
|
|
100
|
+
'transformIgnorePatterns',
|
|
101
|
+
'watchPathIgnorePatterns',
|
|
102
|
+
'unmockedModulePathPatterns',
|
|
103
|
+
'workerIdleMemoryLimit',
|
|
104
|
+
];
|
|
105
|
+
|
|
34
106
|
const transformIgnorePattern = [
|
|
35
107
|
'@material-ui',
|
|
36
108
|
'ajv',
|
|
@@ -76,54 +148,11 @@ async function getProjectConfig(targetPath, extraConfig) {
|
|
|
76
148
|
return require(configTsPath);
|
|
77
149
|
}
|
|
78
150
|
|
|
79
|
-
//
|
|
80
|
-
//
|
|
151
|
+
// Jest config can be defined both in the root package.json and within each package. The root config
|
|
152
|
+
// gets forwarded to us through the `extraConfig` parameter, while the package config is read here.
|
|
153
|
+
// If they happen to be the same the keys will simply override each other.
|
|
81
154
|
// The merging of the configs is shallow, meaning e.g. all transforms are replaced if new ones are defined.
|
|
82
|
-
const
|
|
83
|
-
let closestPkgJson = undefined;
|
|
84
|
-
let currentPath = targetPath;
|
|
85
|
-
|
|
86
|
-
// Some confidence check to avoid infinite loop
|
|
87
|
-
for (let i = 0; i < 100; i++) {
|
|
88
|
-
const packagePath = path.resolve(currentPath, 'package.json');
|
|
89
|
-
const exists = fs.pathExistsSync(packagePath);
|
|
90
|
-
if (exists) {
|
|
91
|
-
try {
|
|
92
|
-
const data = fs.readJsonSync(packagePath);
|
|
93
|
-
if (!closestPkgJson) {
|
|
94
|
-
closestPkgJson = data;
|
|
95
|
-
}
|
|
96
|
-
if (data.jest) {
|
|
97
|
-
pkgJsonConfigs.unshift(data.jest);
|
|
98
|
-
}
|
|
99
|
-
} catch (error) {
|
|
100
|
-
throw new Error(
|
|
101
|
-
`Failed to parse package.json file reading jest configs, ${error}`,
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const newPath = path.dirname(currentPath);
|
|
107
|
-
if (newPath === currentPath) {
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
currentPath = newPath;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// This is an old deprecated option that is no longer used.
|
|
114
|
-
const transformModules = pkgJsonConfigs
|
|
115
|
-
.flatMap(conf => {
|
|
116
|
-
const modules = conf.transformModules || [];
|
|
117
|
-
delete conf.transformModules;
|
|
118
|
-
return modules;
|
|
119
|
-
})
|
|
120
|
-
.map(name => `${name}/`)
|
|
121
|
-
.join('|');
|
|
122
|
-
if (transformModules.length > 0) {
|
|
123
|
-
console.warn(
|
|
124
|
-
'The Backstage CLI jest transformModules option is no longer used and will be ignored. All modules are now always transformed.',
|
|
125
|
-
);
|
|
126
|
-
}
|
|
155
|
+
const pkgJson = await fs.readJson(path.resolve(targetPath, 'package.json'));
|
|
127
156
|
|
|
128
157
|
const options = {
|
|
129
158
|
...extraConfig,
|
|
@@ -191,14 +220,14 @@ async function getProjectConfig(targetPath, extraConfig) {
|
|
|
191
220
|
},
|
|
192
221
|
|
|
193
222
|
// A bit more opinionated
|
|
194
|
-
testMatch: [
|
|
223
|
+
testMatch: [`**/*.test.{${SRC_EXTS.join(',')}}`],
|
|
195
224
|
|
|
196
225
|
runtime: envOptions.oldTests
|
|
197
226
|
? undefined
|
|
198
227
|
: require.resolve('./jestCachingModuleLoader'),
|
|
199
228
|
|
|
200
229
|
transformIgnorePatterns: [`/node_modules/(?:${transformIgnorePattern})/`],
|
|
201
|
-
...getRoleConfig(
|
|
230
|
+
...getRoleConfig(pkgJson.backstage?.role),
|
|
202
231
|
};
|
|
203
232
|
|
|
204
233
|
options.setupFilesAfterEnv = options.setupFilesAfterEnv || [];
|
|
@@ -208,12 +237,15 @@ async function getProjectConfig(targetPath, extraConfig) {
|
|
|
208
237
|
options.setupFilesAfterEnv.unshift(require.resolve('cross-fetch/polyfill'));
|
|
209
238
|
}
|
|
210
239
|
|
|
211
|
-
// Use src/setupTests
|
|
212
|
-
|
|
213
|
-
|
|
240
|
+
// Use src/setupTests.* as the default location for configuring test env
|
|
241
|
+
for (const ext of SRC_EXTS) {
|
|
242
|
+
if (fs.existsSync(path.resolve(targetPath, `src/setupTests.${ext}`))) {
|
|
243
|
+
options.setupFilesAfterEnv.push(`<rootDir>/setupTests.${ext}`);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
214
246
|
}
|
|
215
247
|
|
|
216
|
-
const config = Object.assign(options,
|
|
248
|
+
const config = Object.assign(options, pkgJson.jest);
|
|
217
249
|
|
|
218
250
|
// The config id is a cache key that lets us share the jest cache across projects.
|
|
219
251
|
// If no explicit id was configured, generated one based on the configuration.
|
|
@@ -234,34 +266,47 @@ async function getProjectConfig(targetPath, extraConfig) {
|
|
|
234
266
|
// configuration for the current package, or a collection of configurations for
|
|
235
267
|
// the target workspace packages
|
|
236
268
|
async function getRootConfig() {
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
269
|
+
const rootPkgJson = await fs.readJson(
|
|
270
|
+
paths.resolveTargetRoot('package.json'),
|
|
271
|
+
);
|
|
240
272
|
|
|
241
|
-
const
|
|
242
|
-
coverageDirectory:
|
|
273
|
+
const baseCoverageConfig = {
|
|
274
|
+
coverageDirectory: paths.resolveTarget('coverage'),
|
|
243
275
|
coverageProvider: envOptions.oldTests ? 'v8' : 'babel',
|
|
244
276
|
collectCoverageFrom: ['**/*.{js,jsx,ts,tsx,mjs,cjs}', '!**/*.d.ts'],
|
|
245
277
|
};
|
|
246
278
|
|
|
247
|
-
|
|
248
|
-
|
|
279
|
+
const workspacePatterns =
|
|
280
|
+
rootPkgJson.workspaces && rootPkgJson.workspaces.packages;
|
|
281
|
+
|
|
282
|
+
// Check if we're running within a specific monorepo package. In that case just get the single project config.
|
|
283
|
+
if (!workspacePatterns || paths.targetRoot !== paths.targetDir) {
|
|
284
|
+
return getProjectConfig(paths.targetDir, {
|
|
285
|
+
...baseCoverageConfig,
|
|
286
|
+
...(rootPkgJson.jest ?? {}),
|
|
287
|
+
});
|
|
249
288
|
}
|
|
250
289
|
|
|
251
|
-
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
290
|
+
const globalRootConfig = { ...baseCoverageConfig };
|
|
291
|
+
const globalProjectConfig = {};
|
|
292
|
+
|
|
293
|
+
for (const [key, value] of Object.entries(rootPkgJson.jest ?? {})) {
|
|
294
|
+
if (projectConfigKeys.includes(key)) {
|
|
295
|
+
globalProjectConfig[key] = value;
|
|
296
|
+
} else {
|
|
297
|
+
globalRootConfig[key] = value;
|
|
298
|
+
}
|
|
256
299
|
}
|
|
257
300
|
|
|
258
301
|
// If the target package is a workspace root, we find all packages in the
|
|
259
302
|
// workspace and load those in as separate jest projects instead.
|
|
260
303
|
const projectPaths = await Promise.all(
|
|
261
|
-
workspacePatterns.map(pattern =>
|
|
304
|
+
workspacePatterns.map(pattern =>
|
|
305
|
+
glob(path.join(paths.targetRoot, pattern)),
|
|
306
|
+
),
|
|
262
307
|
).then(_ => _.flat());
|
|
263
308
|
|
|
264
|
-
|
|
309
|
+
let configs = await Promise.all(
|
|
265
310
|
projectPaths.flat().map(async projectPath => {
|
|
266
311
|
const packagePath = path.resolve(projectPath, 'package.json');
|
|
267
312
|
if (!(await fs.pathExists(packagePath))) {
|
|
@@ -277,6 +322,7 @@ async function getRootConfig() {
|
|
|
277
322
|
testScript?.includes('backstage-cli package test');
|
|
278
323
|
if (testScript && isSupportedTestScript) {
|
|
279
324
|
return await getProjectConfig(projectPath, {
|
|
325
|
+
...globalProjectConfig,
|
|
280
326
|
displayName: packageData.name,
|
|
281
327
|
});
|
|
282
328
|
}
|
|
@@ -285,10 +331,18 @@ async function getRootConfig() {
|
|
|
285
331
|
}),
|
|
286
332
|
).then(cs => cs.filter(Boolean));
|
|
287
333
|
|
|
334
|
+
const cache = global.__backstageCli_jestSuccessCache;
|
|
335
|
+
if (cache) {
|
|
336
|
+
configs = await cache.filterConfigs(configs, globalRootConfig);
|
|
337
|
+
}
|
|
338
|
+
|
|
288
339
|
return {
|
|
289
|
-
rootDir:
|
|
340
|
+
rootDir: paths.targetRoot,
|
|
290
341
|
projects: configs,
|
|
291
|
-
|
|
342
|
+
testResultsProcessor: cache
|
|
343
|
+
? require.resolve('./jestCacheResultProcessor.cjs')
|
|
344
|
+
: undefined,
|
|
345
|
+
...globalRootConfig,
|
|
292
346
|
};
|
|
293
347
|
}
|
|
294
348
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 The Backstage Authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
module.exports = async results => {
|
|
18
|
+
const cache = global.__backstageCli_jestSuccessCache;
|
|
19
|
+
if (cache) {
|
|
20
|
+
await cache.reportResults(results);
|
|
21
|
+
}
|
|
22
|
+
return results;
|
|
23
|
+
};
|
|
@@ -18,7 +18,10 @@ const { createTransformer: createSwcTransformer } = require('@swc/jest');
|
|
|
18
18
|
const ESM_REGEX = /\b(?:import|export)\b/;
|
|
19
19
|
|
|
20
20
|
function createTransformer(config) {
|
|
21
|
-
const swcTransformer = createSwcTransformer(
|
|
21
|
+
const swcTransformer = createSwcTransformer({
|
|
22
|
+
inputSourceMap: false,
|
|
23
|
+
...config,
|
|
24
|
+
});
|
|
22
25
|
const process = (source, filePath, jestOptions) => {
|
|
23
26
|
if (filePath.endsWith('.js') && !ESM_REGEX.test(source)) {
|
|
24
27
|
return { code: source };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var os = require('os');
|
|
4
|
+
var fs = require('fs-extra');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var tar = require('tar');
|
|
7
|
+
var createDistWorkspace = require('../../lib/packager/createDistWorkspace.cjs.js');
|
|
8
|
+
var parallel = require('../../lib/parallel.cjs.js');
|
|
9
|
+
var packager = require('../../lib/builder/packager.cjs.js');
|
|
10
|
+
var types = require('../../lib/builder/types.cjs.js');
|
|
11
|
+
var cliNode = require('@backstage/cli-node');
|
|
12
|
+
|
|
13
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var os__default = /*#__PURE__*/_interopDefaultCompat(os);
|
|
16
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
17
|
+
var tar__default = /*#__PURE__*/_interopDefaultCompat(tar);
|
|
18
|
+
|
|
19
|
+
const BUNDLE_FILE = "bundle.tar.gz";
|
|
20
|
+
const SKELETON_FILE = "skeleton.tar.gz";
|
|
21
|
+
async function buildBackend(options) {
|
|
22
|
+
const { targetDir, skipBuildDependencies, configPaths, minify } = options;
|
|
23
|
+
const pkg = await fs__default.default.readJson(path.resolve(targetDir, "package.json"));
|
|
24
|
+
await packager.buildPackage({
|
|
25
|
+
targetDir,
|
|
26
|
+
packageJson: pkg,
|
|
27
|
+
outputs: /* @__PURE__ */ new Set([types.Output.cjs]),
|
|
28
|
+
minify,
|
|
29
|
+
workspacePackages: await cliNode.PackageGraph.listTargetPackages()
|
|
30
|
+
});
|
|
31
|
+
const tmpDir = await fs__default.default.mkdtemp(path.resolve(os__default.default.tmpdir(), "backstage-bundle"));
|
|
32
|
+
try {
|
|
33
|
+
await createDistWorkspace.createDistWorkspace([pkg.name], {
|
|
34
|
+
targetDir: tmpDir,
|
|
35
|
+
configPaths,
|
|
36
|
+
buildDependencies: !skipBuildDependencies,
|
|
37
|
+
buildExcludes: [pkg.name],
|
|
38
|
+
parallelism: parallel.getEnvironmentParallelism(),
|
|
39
|
+
skeleton: SKELETON_FILE,
|
|
40
|
+
minify
|
|
41
|
+
});
|
|
42
|
+
const distDir = path.resolve(targetDir, "dist");
|
|
43
|
+
await fs__default.default.remove(distDir);
|
|
44
|
+
await fs__default.default.mkdir(distDir);
|
|
45
|
+
await fs__default.default.move(
|
|
46
|
+
path.resolve(tmpDir, SKELETON_FILE),
|
|
47
|
+
path.resolve(distDir, SKELETON_FILE)
|
|
48
|
+
);
|
|
49
|
+
await tar__default.default.create(
|
|
50
|
+
{
|
|
51
|
+
file: path.resolve(distDir, BUNDLE_FILE),
|
|
52
|
+
cwd: tmpDir,
|
|
53
|
+
portable: true,
|
|
54
|
+
noMtime: true,
|
|
55
|
+
gzip: true
|
|
56
|
+
},
|
|
57
|
+
[""]
|
|
58
|
+
);
|
|
59
|
+
} finally {
|
|
60
|
+
await fs__default.default.remove(tmpDir);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
exports.buildBackend = buildBackend;
|
|
65
|
+
//# sourceMappingURL=buildBackend.cjs.js.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs-extra');
|
|
4
|
+
var path = require('path');
|
|
5
|
+
require('webpack');
|
|
6
|
+
require('chalk');
|
|
7
|
+
require('eslint-webpack-plugin');
|
|
8
|
+
require('fork-ts-checker-webpack-plugin');
|
|
9
|
+
require('html-webpack-plugin');
|
|
10
|
+
require('@module-federation/enhanced/webpack');
|
|
11
|
+
require('@backstage/cli-common');
|
|
12
|
+
require('react-dev-utils/ModuleScopePlugin');
|
|
13
|
+
require('run-script-webpack-plugin');
|
|
14
|
+
require('@pmmmwh/react-refresh-webpack-plugin');
|
|
15
|
+
require('../../lib/paths.cjs.js');
|
|
16
|
+
require('@manypkg/get-packages');
|
|
17
|
+
require('webpack-node-externals');
|
|
18
|
+
require('../../lib/bundler/optimization.cjs.js');
|
|
19
|
+
require('lodash/pickBy');
|
|
20
|
+
require('../../lib/run.cjs.js');
|
|
21
|
+
require('mini-css-extract-plugin');
|
|
22
|
+
require('../../lib/version.cjs.js');
|
|
23
|
+
require('yn');
|
|
24
|
+
var bundle = require('../../lib/bundler/bundle.cjs.js');
|
|
25
|
+
var moduleFederation = require('../../lib/bundler/moduleFederation.cjs.js');
|
|
26
|
+
require('react-dev-utils/openBrowser');
|
|
27
|
+
require('webpack-dev-server');
|
|
28
|
+
var config = require('../../lib/config.cjs.js');
|
|
29
|
+
require('../../lib/bundler/packageDetection.cjs.js');
|
|
30
|
+
var parallel = require('../../lib/parallel.cjs.js');
|
|
31
|
+
|
|
32
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
33
|
+
|
|
34
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
35
|
+
|
|
36
|
+
async function buildFrontend(options) {
|
|
37
|
+
const { targetDir, writeStats, configPaths } = options;
|
|
38
|
+
const { name } = await fs__default.default.readJson(path.resolve(targetDir, "package.json"));
|
|
39
|
+
await bundle.buildBundle({
|
|
40
|
+
targetDir,
|
|
41
|
+
entry: "src/index",
|
|
42
|
+
parallelism: parallel.getEnvironmentParallelism(),
|
|
43
|
+
statsJsonEnabled: writeStats,
|
|
44
|
+
moduleFederation: moduleFederation.getModuleFederationOptions(
|
|
45
|
+
name,
|
|
46
|
+
options.isModuleFederationRemote
|
|
47
|
+
),
|
|
48
|
+
...await config.loadCliConfig({
|
|
49
|
+
args: configPaths,
|
|
50
|
+
fromPackage: name
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
exports.buildFrontend = buildFrontend;
|
|
56
|
+
//# sourceMappingURL=buildFrontend.cjs.js.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var packager = require('../../lib/builder/packager.cjs.js');
|
|
4
|
+
var types = require('../../lib/builder/types.cjs.js');
|
|
5
|
+
var role = require('../../lib/role.cjs.js');
|
|
6
|
+
var cliNode = require('@backstage/cli-node');
|
|
7
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
8
|
+
var buildFrontend = require('./buildFrontend.cjs.js');
|
|
9
|
+
var buildBackend = require('./buildBackend.cjs.js');
|
|
10
|
+
var urls = require('../../lib/urls.cjs.js');
|
|
11
|
+
var chalk = require('chalk');
|
|
12
|
+
|
|
13
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
16
|
+
|
|
17
|
+
async function command(opts) {
|
|
18
|
+
const role$1 = await role.findRoleFromCommand(opts);
|
|
19
|
+
if (role$1 === "frontend" || role$1 === "backend") {
|
|
20
|
+
const configPaths = opts.config.map((arg) => {
|
|
21
|
+
if (urls.isValidUrl(arg)) {
|
|
22
|
+
return arg;
|
|
23
|
+
}
|
|
24
|
+
return paths.paths.resolveTarget(arg);
|
|
25
|
+
});
|
|
26
|
+
if (role$1 === "frontend") {
|
|
27
|
+
return buildFrontend.buildFrontend({
|
|
28
|
+
targetDir: paths.paths.targetDir,
|
|
29
|
+
configPaths,
|
|
30
|
+
writeStats: Boolean(opts.stats)
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return buildBackend.buildBackend({
|
|
34
|
+
targetDir: paths.paths.targetDir,
|
|
35
|
+
configPaths,
|
|
36
|
+
skipBuildDependencies: Boolean(opts.skipBuildDependencies),
|
|
37
|
+
minify: Boolean(opts.minify)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (role$1 === "frontend-dynamic-container") {
|
|
41
|
+
console.log(
|
|
42
|
+
chalk__default.default.yellow(
|
|
43
|
+
`\u26A0\uFE0F WARNING: The 'frontend-dynamic-container' package role is experimental and will receive immediate breaking changes in the future.`
|
|
44
|
+
)
|
|
45
|
+
);
|
|
46
|
+
return buildFrontend.buildFrontend({
|
|
47
|
+
targetDir: paths.paths.targetDir,
|
|
48
|
+
configPaths: [],
|
|
49
|
+
writeStats: Boolean(opts.stats),
|
|
50
|
+
isModuleFederationRemote: true
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const roleInfo = cliNode.PackageRoles.getRoleInfo(role$1);
|
|
54
|
+
const outputs = /* @__PURE__ */ new Set();
|
|
55
|
+
if (roleInfo.output.includes("cjs")) {
|
|
56
|
+
outputs.add(types.Output.cjs);
|
|
57
|
+
}
|
|
58
|
+
if (roleInfo.output.includes("esm")) {
|
|
59
|
+
outputs.add(types.Output.esm);
|
|
60
|
+
}
|
|
61
|
+
if (roleInfo.output.includes("types")) {
|
|
62
|
+
outputs.add(types.Output.types);
|
|
63
|
+
}
|
|
64
|
+
return packager.buildPackage({
|
|
65
|
+
outputs,
|
|
66
|
+
minify: Boolean(opts.minify),
|
|
67
|
+
workspacePackages: await cliNode.PackageGraph.listTargetPackages()
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
exports.command = command;
|
|
72
|
+
//# sourceMappingURL=command.cjs.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var fs = require('fs-extra');
|
|
6
|
+
var createDistWorkspace = require('../lib/packager/createDistWorkspace.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
|
+
var buildWorkspace = async (dir, packages, options) => {
|
|
13
|
+
if (!await fs__default.default.pathExists(dir)) {
|
|
14
|
+
throw new Error(`Target workspace directory doesn't exist, '${dir}'`);
|
|
15
|
+
}
|
|
16
|
+
await createDistWorkspace.createDistWorkspace(packages, {
|
|
17
|
+
targetDir: dir,
|
|
18
|
+
alwaysYarnPack: options.alwaysYarnPack,
|
|
19
|
+
enableFeatureDetection: true
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.default = buildWorkspace;
|
|
24
|
+
//# sourceMappingURL=buildWorkspace.cjs.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var fs = require('fs-extra');
|
|
6
|
+
var paths = require('../../lib/paths.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
|
+
async function clean() {
|
|
13
|
+
await fs__default.default.remove(paths.paths.resolveTarget("dist"));
|
|
14
|
+
await fs__default.default.remove(paths.paths.resolveTarget("dist-types"));
|
|
15
|
+
await fs__default.default.remove(paths.paths.resolveTarget("coverage"));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.default = clean;
|
|
19
|
+
//# sourceMappingURL=clean.cjs.js.map
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var configLoader = require('@backstage/config-loader');
|
|
4
6
|
var openBrowser = require('react-dev-utils/openBrowser');
|
|
5
|
-
var config = require('
|
|
6
|
-
require('@backstage/config');
|
|
7
|
-
require('./index-v57xnvgT.cjs.js');
|
|
8
|
-
require('commander');
|
|
9
|
-
require('chalk');
|
|
10
|
-
require('fs-extra');
|
|
11
|
-
require('semver');
|
|
12
|
-
require('@backstage/cli-common');
|
|
13
|
-
require('@backstage/errors');
|
|
14
|
-
require('@manypkg/get-packages');
|
|
15
|
-
require('@backstage/cli-node');
|
|
7
|
+
var config = require('../../lib/config.cjs.js');
|
|
16
8
|
|
|
17
9
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
18
10
|
|
|
@@ -34,4 +26,4 @@ var docs = async (opts) => {
|
|
|
34
26
|
};
|
|
35
27
|
|
|
36
28
|
exports.default = docs;
|
|
37
|
-
//# sourceMappingURL=docs
|
|
29
|
+
//# sourceMappingURL=docs.cjs.js.map
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var yaml = require('yaml');
|
|
4
6
|
var config$1 = require('@backstage/config');
|
|
5
|
-
var config = require('
|
|
6
|
-
require('@backstage/config-loader');
|
|
7
|
-
require('./index-v57xnvgT.cjs.js');
|
|
8
|
-
require('commander');
|
|
9
|
-
require('chalk');
|
|
10
|
-
require('fs-extra');
|
|
11
|
-
require('semver');
|
|
12
|
-
require('@backstage/cli-common');
|
|
13
|
-
require('@backstage/errors');
|
|
14
|
-
require('@manypkg/get-packages');
|
|
15
|
-
require('@backstage/cli-node');
|
|
7
|
+
var config = require('../../lib/config.cjs.js');
|
|
16
8
|
|
|
17
9
|
var print = async (opts) => {
|
|
18
10
|
const { schema, appConfigs } = await config.loadCliConfig({
|
|
@@ -58,4 +50,4 @@ function serializeConfigData(appConfigs, schema, visibility) {
|
|
|
58
50
|
}
|
|
59
51
|
|
|
60
52
|
exports.default = print;
|
|
61
|
-
//# sourceMappingURL=print
|
|
53
|
+
//# sourceMappingURL=print.cjs.js.map
|