@backstage/cli 0.26.11-next.1 → 0.27.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/config/eslint-factory.js +1 -0
- package/dist/cjs/Lockfile-B4mqBkH6.cjs.js +86 -0
- package/dist/cjs/{build-fqzNfqa5.cjs.js → build-D5DoFqm6.cjs.js} +9 -13
- package/dist/cjs/{buildBackend-CrQ_GwBs.cjs.js → buildBackend-UK6nC6VL.cjs.js} +41 -38
- package/dist/cjs/{buildWorkspace-Bv-xt2y-.cjs.js → buildWorkspace-Z-hpJt9g.cjs.js} +4 -4
- package/dist/cjs/{bump-DG3jcOMS.cjs.js → bump-Qc4jNLOA.cjs.js} +7 -84
- package/dist/cjs/{clean-BGNU8ShE.cjs.js → clean-CB6dTqaG.cjs.js} +2 -2
- package/dist/cjs/{clean-83xjoKEJ.cjs.js → clean-DlsJGDLw.cjs.js} +2 -2
- package/dist/cjs/{codeowners-B-nGMoIG.cjs.js → codeowners-0MT7UP_S.cjs.js} +2 -2
- package/dist/cjs/{config-eLDUbNFK.cjs.js → config-B1bkp-HP.cjs.js} +43 -35
- package/dist/cjs/{createDistWorkspace-vhWGDizr.cjs.js → createDistWorkspace-0v54ePDJ.cjs.js} +3 -3
- package/dist/cjs/{createPlugin-B1qnN0IC.cjs.js → createPlugin-CUOGhq6P.cjs.js} +6 -6
- package/dist/cjs/{diff-BU6vhJMf.cjs.js → diff-BaiaASdN.cjs.js} +2 -2
- package/dist/cjs/{docs-GJmQNVkJ.cjs.js → docs-D8vejOxE.cjs.js} +3 -3
- package/dist/cjs/{fix-BhwlcHp_.cjs.js → fix-C7T4cvOB.cjs.js} +2 -2
- package/dist/cjs/{index-CTTm1_x6.cjs.js → index-1VtfY6wb.cjs.js} +4 -4
- package/dist/cjs/{index-CYI5nGsH.cjs.js → index-B8Ebu0mP.cjs.js} +38 -16
- package/dist/cjs/{index-DX-m2Ed0.cjs.js → index-BAcLy7dK.cjs.js} +48 -47
- package/dist/cjs/{index-pTrNn6sL.cjs.js → index-Bu7Vqly9.cjs.js} +50 -63
- package/dist/cjs/{index-D8nglRxA.cjs.js → index-F8W-9gIc.cjs.js} +2 -2
- package/dist/cjs/{info-CSiHnHqF.cjs.js → info-D_IhL0i0.cjs.js} +4 -4
- package/dist/cjs/{install-C6PA5oT4.cjs.js → install-DGaf_UuL.cjs.js} +5 -5
- package/dist/cjs/{lint-yikicfA4.cjs.js → lint-CRqMLZJ5.cjs.js} +2 -2
- package/dist/cjs/lint-Dkx_fBkS.cjs.js +10 -0
- package/dist/cjs/{lint-D0v-Gi6H.cjs.js → lint-EJvdRB7_.cjs.js} +2 -2
- package/dist/cjs/{list-deprecations-Coko6Rsb.cjs.js → list-deprecations-COfvNjrB.cjs.js} +2 -2
- package/dist/cjs/{packageDetection-B6lJYBh9.cjs.js → moduleFederation-CQZbFAit.cjs.js} +179 -38
- package/dist/cjs/{new-Da1kvXDQ.cjs.js → new-DB_oe66E.cjs.js} +6 -6
- package/dist/cjs/{pack-D8b4JM6B.cjs.js → pack-BcxxlYor.cjs.js} +2 -2
- package/dist/cjs/{packageExports-DDff9ia4.cjs.js → packageExports-FpoAU1Be.cjs.js} +3 -3
- package/dist/cjs/{packageLintConfigs-Bfvzg--7.cjs.js → packageLintConfigs-D7LMvTow.cjs.js} +3 -3
- package/dist/cjs/{packageRole-CXerjPpL.cjs.js → packageRole-BeuvccV9.cjs.js} +2 -2
- package/dist/cjs/{packages-BgyW9VKx.cjs.js → packages-DPPEGYIi.cjs.js} +3 -3
- package/dist/cjs/{print-C5tbwB1-.cjs.js → print-DuJqsJ2y.cjs.js} +3 -3
- package/dist/cjs/{role-BjmWpqH5.cjs.js → role-DAaP4LE5.cjs.js} +2 -2
- package/dist/cjs/{run-ClbD5HPt.cjs.js → run-CPcG7YxR.cjs.js} +2 -2
- package/dist/cjs/{schema-DbqftE60.cjs.js → schema-CR794PHv.cjs.js} +3 -3
- package/dist/cjs/{tasks-XfFuuYgf.cjs.js → tasks-4L8FqWEM.cjs.js} +2 -2
- package/dist/cjs/{test-BYKGLz-_.cjs.js → test-303IpaqN.cjs.js} +3 -3
- package/dist/cjs/{test-BEyXOT0e.cjs.js → test-y8AV0JOP.cjs.js} +3 -3
- package/dist/cjs/{validate-D4vVgxsi.cjs.js → validate-DZJIL6CK.cjs.js} +3 -3
- package/dist/index.cjs.js +1 -1
- package/package.json +12 -11
- package/templates/default-backend-plugin/package.json.hbs +0 -1
- package/templates/default-backend-plugin/src/service/router.ts +2 -3
- package/templates/default-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx.hbs +2 -2
- package/dist/cjs/Lockfile-BndFvzHc.cjs.js +0 -221
- package/dist/cjs/lint-DqMGmvsS.cjs.js +0 -112
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"@backstage/backend-common": "{{versionQuery '@backstage/backend-common'}}",
|
|
32
32
|
"@backstage/backend-defaults": "{{versionQuery '@backstage/backend-defaults'}}",
|
|
33
33
|
"@backstage/backend-plugin-api": "{{versionQuery '@backstage/backend-plugin-api'}}",
|
|
34
|
-
"@backstage/config": "{{versionQuery '@backstage/config'}}",
|
|
35
34
|
"express": "{{versionQuery 'express' '4.17.1'}}",
|
|
36
35
|
"express-promise-router": "{{versionQuery 'express-promise-router' '4.1.0'}}",
|
|
37
36
|
"node-fetch": "{{versionQuery 'node-fetch' '2.6.7'}}"
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
|
|
2
|
-
import { LoggerService } from '@backstage/backend-plugin-api';
|
|
3
|
-
import { Config } from '@backstage/config';
|
|
2
|
+
import { LoggerService, RootConfigService } from '@backstage/backend-plugin-api';
|
|
4
3
|
import express from 'express';
|
|
5
4
|
import Router from 'express-promise-router';
|
|
6
5
|
|
|
7
6
|
export interface RouterOptions {
|
|
8
7
|
logger: LoggerService;
|
|
9
|
-
config:
|
|
8
|
+
config: RootConfigService;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
export async function createRouter(
|
package/templates/default-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx.hbs
CHANGED
|
@@ -4,14 +4,14 @@ import { rest } from 'msw';
|
|
|
4
4
|
import { setupServer } from 'msw/node';
|
|
5
5
|
import { screen } from '@testing-library/react';
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
registerMswTestHooks,
|
|
8
8
|
renderInTestApp,
|
|
9
9
|
} from '@backstage/test-utils';
|
|
10
10
|
|
|
11
11
|
describe('ExampleComponent', () => {
|
|
12
12
|
const server = setupServer();
|
|
13
13
|
// Enable sane handlers for network requests
|
|
14
|
-
|
|
14
|
+
registerMswTestHooks(server);
|
|
15
15
|
|
|
16
16
|
// setup mock response
|
|
17
17
|
beforeEach(() => {
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('fs-extra');
|
|
4
|
-
var semver = require('semver');
|
|
5
|
-
var parsers = require('@yarnpkg/parsers');
|
|
6
|
-
var lockfile = require('@yarnpkg/lockfile');
|
|
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
|
-
var semver__default = /*#__PURE__*/_interopDefaultCompat(semver);
|
|
12
|
-
|
|
13
|
-
const ENTRY_PATTERN = /^((?:@[^/]+\/)?[^@/]+)@(.+)$/;
|
|
14
|
-
const NEW_HEADER = `${[
|
|
15
|
-
`# This file is generated by running "yarn install" inside your project.
|
|
16
|
-
`,
|
|
17
|
-
`# Manual changes might be lost - proceed with caution!
|
|
18
|
-
`
|
|
19
|
-
].join(``)}
|
|
20
|
-
`;
|
|
21
|
-
const LEGACY_REGEX = /^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i;
|
|
22
|
-
const SPECIAL_OBJECT_KEYS = [
|
|
23
|
-
`__metadata`,
|
|
24
|
-
`version`,
|
|
25
|
-
`resolution`,
|
|
26
|
-
`dependencies`,
|
|
27
|
-
`peerDependencies`,
|
|
28
|
-
`dependenciesMeta`,
|
|
29
|
-
`peerDependenciesMeta`,
|
|
30
|
-
`binaries`
|
|
31
|
-
];
|
|
32
|
-
class Lockfile {
|
|
33
|
-
constructor(packages, data, legacy = false) {
|
|
34
|
-
this.packages = packages;
|
|
35
|
-
this.data = data;
|
|
36
|
-
this.legacy = legacy;
|
|
37
|
-
}
|
|
38
|
-
static async load(path) {
|
|
39
|
-
const lockfileContents = await fs__default.default.readFile(path, "utf8");
|
|
40
|
-
return Lockfile.parse(lockfileContents);
|
|
41
|
-
}
|
|
42
|
-
static parse(content) {
|
|
43
|
-
const legacy = LEGACY_REGEX.test(content);
|
|
44
|
-
let data;
|
|
45
|
-
try {
|
|
46
|
-
data = parsers.parseSyml(content);
|
|
47
|
-
} catch (err) {
|
|
48
|
-
throw new Error(`Failed yarn.lock parse, ${err}`);
|
|
49
|
-
}
|
|
50
|
-
const packages = /* @__PURE__ */ new Map();
|
|
51
|
-
for (const [key, value] of Object.entries(data)) {
|
|
52
|
-
if (SPECIAL_OBJECT_KEYS.includes(key)) continue;
|
|
53
|
-
const [, name, ranges] = ENTRY_PATTERN.exec(key) ?? [];
|
|
54
|
-
if (!name) {
|
|
55
|
-
throw new Error(`Failed to parse yarn.lock entry '${key}'`);
|
|
56
|
-
}
|
|
57
|
-
let queries = packages.get(name);
|
|
58
|
-
if (!queries) {
|
|
59
|
-
queries = [];
|
|
60
|
-
packages.set(name, queries);
|
|
61
|
-
}
|
|
62
|
-
for (let range of ranges.split(/\s*,\s*/)) {
|
|
63
|
-
if (range.startsWith(`${name}@`)) {
|
|
64
|
-
range = range.slice(`${name}@`.length);
|
|
65
|
-
}
|
|
66
|
-
if (range.startsWith("npm:")) {
|
|
67
|
-
range = range.slice("npm:".length);
|
|
68
|
-
}
|
|
69
|
-
queries.push({ range, version: value.version, dataKey: key });
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return new Lockfile(packages, data, legacy);
|
|
73
|
-
}
|
|
74
|
-
/** Get the entries for a single package in the lockfile */
|
|
75
|
-
get(name) {
|
|
76
|
-
return this.packages.get(name);
|
|
77
|
-
}
|
|
78
|
-
/** Returns the name of all packages available in the lockfile */
|
|
79
|
-
keys() {
|
|
80
|
-
return this.packages.keys();
|
|
81
|
-
}
|
|
82
|
-
/** Analyzes the lockfile to identify possible actions and warnings for the entries */
|
|
83
|
-
analyze(options) {
|
|
84
|
-
const { filter, localPackages } = options;
|
|
85
|
-
const result = {
|
|
86
|
-
invalidRanges: [],
|
|
87
|
-
newVersions: [],
|
|
88
|
-
newRanges: []
|
|
89
|
-
};
|
|
90
|
-
for (const [name, allEntries] of this.packages) {
|
|
91
|
-
if (filter && !filter(name)) {
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
const invalid = allEntries.filter(
|
|
95
|
-
(e) => !semver__default.default.validRange(e.range) && !e.range.startsWith("workspace:")
|
|
96
|
-
);
|
|
97
|
-
result.invalidRanges.push(
|
|
98
|
-
...invalid.map(({ range }) => ({ name, range }))
|
|
99
|
-
);
|
|
100
|
-
const entries = allEntries.filter((e) => semver__default.default.validRange(e.range));
|
|
101
|
-
if (entries.length < 2) {
|
|
102
|
-
continue;
|
|
103
|
-
}
|
|
104
|
-
const versions = Array.from(new Set(entries.map((e) => e.version))).map((v) => {
|
|
105
|
-
if (v === "0.0.0-use.local") {
|
|
106
|
-
const local = localPackages.get(name);
|
|
107
|
-
if (!local) {
|
|
108
|
-
throw new Error(`No local package found for ${name}`);
|
|
109
|
-
}
|
|
110
|
-
if (!local.packageJson.version) {
|
|
111
|
-
throw new Error(`No version found for local package ${name}`);
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
entryVersion: v,
|
|
115
|
-
actualVersion: local.packageJson.version
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
return { entryVersion: v, actualVersion: v };
|
|
119
|
-
}).sort((v1, v2) => semver__default.default.rcompare(v1.actualVersion, v2.actualVersion));
|
|
120
|
-
if (versions.length < 2) {
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
const acceptedVersions = /* @__PURE__ */ new Set();
|
|
124
|
-
for (const { version, range } of entries) {
|
|
125
|
-
const acceptedVersion = versions.find(
|
|
126
|
-
(v) => semver__default.default.satisfies(v.actualVersion, range)
|
|
127
|
-
);
|
|
128
|
-
if (!acceptedVersion) {
|
|
129
|
-
throw new Error(
|
|
130
|
-
`No existing version was accepted for range ${range}, searching through ${versions}, for package ${name}`
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
if (acceptedVersion.entryVersion !== version) {
|
|
134
|
-
result.newVersions.push({
|
|
135
|
-
name,
|
|
136
|
-
range,
|
|
137
|
-
newVersion: acceptedVersion.entryVersion,
|
|
138
|
-
oldVersion: version
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
acceptedVersions.add(acceptedVersion.actualVersion);
|
|
142
|
-
}
|
|
143
|
-
if (acceptedVersions.size === 1) {
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
const maxVersion = Array.from(acceptedVersions).sort(semver__default.default.rcompare)[0];
|
|
147
|
-
const maxEntry = entries.filter((e) => semver__default.default.satisfies(maxVersion, e.range)).map((e) => ({ e, min: semver__default.default.minVersion(e.range) })).filter((p) => p.min).sort((a, b) => semver__default.default.rcompare(a.min, b.min))[0]?.e;
|
|
148
|
-
if (!maxEntry) {
|
|
149
|
-
throw new Error(
|
|
150
|
-
`No entry found that satisfies max version '${maxVersion}'`
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
for (const { version, range } of entries) {
|
|
154
|
-
if (semver__default.default.satisfies(maxVersion, range)) {
|
|
155
|
-
continue;
|
|
156
|
-
}
|
|
157
|
-
result.newRanges.push({
|
|
158
|
-
name,
|
|
159
|
-
oldRange: range,
|
|
160
|
-
newRange: maxEntry.range,
|
|
161
|
-
oldVersion: version,
|
|
162
|
-
newVersion: maxVersion
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return result;
|
|
167
|
-
}
|
|
168
|
-
remove(name, range) {
|
|
169
|
-
const query = `${name}@${range}`;
|
|
170
|
-
const existed = Boolean(this.data[query]);
|
|
171
|
-
delete this.data[query];
|
|
172
|
-
const newEntries = this.packages.get(name)?.filter((e) => e.range !== range);
|
|
173
|
-
if (newEntries) {
|
|
174
|
-
this.packages.set(name, newEntries);
|
|
175
|
-
}
|
|
176
|
-
return existed;
|
|
177
|
-
}
|
|
178
|
-
/** Modifies the lockfile by bumping packages to the suggested versions */
|
|
179
|
-
replaceVersions(results) {
|
|
180
|
-
for (const { name, range, oldVersion, newVersion } of results) {
|
|
181
|
-
const query = `${name}@${range}`;
|
|
182
|
-
const entryData = this.data[query];
|
|
183
|
-
if (!entryData) {
|
|
184
|
-
throw new Error(`No entry data for ${query}`);
|
|
185
|
-
}
|
|
186
|
-
if (entryData.version !== oldVersion) {
|
|
187
|
-
throw new Error(
|
|
188
|
-
`Expected existing version data for ${query} to be ${oldVersion}, was ${entryData.version}`
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
const matchingEntry = Object.entries(this.data).find(
|
|
192
|
-
([q, e]) => q.startsWith(`${name}@`) && e.version === newVersion
|
|
193
|
-
);
|
|
194
|
-
if (!matchingEntry) {
|
|
195
|
-
throw new Error(
|
|
196
|
-
`No matching entry found for ${name} at version ${newVersion}`
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
this.data[query] = matchingEntry[1];
|
|
200
|
-
const entry = this.packages.get(name)?.find((e) => e.range === range);
|
|
201
|
-
if (!entry) {
|
|
202
|
-
throw new Error(`No entry data for ${query}`);
|
|
203
|
-
}
|
|
204
|
-
if (entry.version !== oldVersion) {
|
|
205
|
-
throw new Error(
|
|
206
|
-
`Expected existing version data for ${query} to be ${oldVersion}, was ${entryData.version}`
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
entry.version = newVersion;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
async save(path) {
|
|
213
|
-
await fs__default.default.writeFile(path, this.toString(), "utf8");
|
|
214
|
-
}
|
|
215
|
-
toString() {
|
|
216
|
-
return this.legacy ? lockfile.stringify(this.data) : NEW_HEADER + parsers.stringifySyml(this.data);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
exports.Lockfile = Lockfile;
|
|
221
|
-
//# sourceMappingURL=Lockfile-BndFvzHc.cjs.js.map
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var Lockfile = require('./Lockfile-BndFvzHc.cjs.js');
|
|
4
|
-
require('minimatch');
|
|
5
|
-
require('@manypkg/get-packages');
|
|
6
|
-
require('chalk');
|
|
7
|
-
require('./yarn-Ukl9MOS0.cjs.js');
|
|
8
|
-
require('./run-ClbD5HPt.cjs.js');
|
|
9
|
-
var index = require('./index-DX-m2Ed0.cjs.js');
|
|
10
|
-
var partition = require('lodash/partition');
|
|
11
|
-
var cliNode = require('@backstage/cli-node');
|
|
12
|
-
require('fs-extra');
|
|
13
|
-
require('semver');
|
|
14
|
-
require('@yarnpkg/parsers');
|
|
15
|
-
require('@yarnpkg/lockfile');
|
|
16
|
-
require('@backstage/errors');
|
|
17
|
-
require('child_process');
|
|
18
|
-
require('util');
|
|
19
|
-
require('commander');
|
|
20
|
-
require('@backstage/cli-common');
|
|
21
|
-
|
|
22
|
-
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
23
|
-
|
|
24
|
-
var partition__default = /*#__PURE__*/_interopDefaultCompat(partition);
|
|
25
|
-
|
|
26
|
-
const INCLUDED = [/^@backstage\//];
|
|
27
|
-
const includedFilter = (name) => INCLUDED.some((pattern) => pattern.test(name));
|
|
28
|
-
const FORBID_DUPLICATES = [/^@backstage\/\w+-app-api$/, /^@backstage\/plugin-/];
|
|
29
|
-
const ALLOW_DUPLICATES = [
|
|
30
|
-
/^@backstage\/core-plugin-api$/,
|
|
31
|
-
// Duplicates of libraries are OK
|
|
32
|
-
// TODO(Rugvip): Check this using package role instead
|
|
33
|
-
/^@backstage\/plugin-.*-react$/,
|
|
34
|
-
/^@backstage\/plugin-.*-node$/,
|
|
35
|
-
/^@backstage\/plugin-.*-common$/
|
|
36
|
-
];
|
|
37
|
-
const forbiddenDuplicatesFilter = (name) => FORBID_DUPLICATES.some((pattern) => pattern.test(name)) && !ALLOW_DUPLICATES.some((pattern) => pattern.test(name));
|
|
38
|
-
var lint = async (cmd) => {
|
|
39
|
-
const fix = Boolean(cmd.fix);
|
|
40
|
-
let success = true;
|
|
41
|
-
const lockfilePath = index.paths.resolveTargetRoot("yarn.lock");
|
|
42
|
-
const lockfile = await Lockfile.Lockfile.load(lockfilePath);
|
|
43
|
-
const result = lockfile.analyze({
|
|
44
|
-
filter: includedFilter,
|
|
45
|
-
localPackages: cliNode.PackageGraph.fromPackages(
|
|
46
|
-
await cliNode.PackageGraph.listTargetPackages()
|
|
47
|
-
)
|
|
48
|
-
});
|
|
49
|
-
logArray(
|
|
50
|
-
result.invalidRanges,
|
|
51
|
-
"The following packages versions are invalid and can't be analyzed:",
|
|
52
|
-
(e) => ` ${e.name} @ ${e.range}`
|
|
53
|
-
);
|
|
54
|
-
if (fix) {
|
|
55
|
-
lockfile.replaceVersions(result.newVersions);
|
|
56
|
-
await lockfile.save(lockfilePath);
|
|
57
|
-
} else {
|
|
58
|
-
const [newVersionsForbidden, newVersionsAllowed] = partition__default.default(
|
|
59
|
-
result.newVersions,
|
|
60
|
-
({ name }) => forbiddenDuplicatesFilter(name)
|
|
61
|
-
);
|
|
62
|
-
if (newVersionsForbidden.length && !fix) {
|
|
63
|
-
success = false;
|
|
64
|
-
}
|
|
65
|
-
logArray(
|
|
66
|
-
newVersionsForbidden,
|
|
67
|
-
"The following packages must be deduplicated, this can be done automatically with --fix",
|
|
68
|
-
(e) => ` ${e.name} @ ${e.range} bumped from ${e.oldVersion} to ${e.newVersion}`
|
|
69
|
-
);
|
|
70
|
-
logArray(
|
|
71
|
-
newVersionsAllowed,
|
|
72
|
-
"The following packages can be deduplicated, this can be done automatically with --fix",
|
|
73
|
-
(e) => ` ${e.name} @ ${e.range} bumped from ${e.oldVersion} to ${e.newVersion}`
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
const [newRangesForbidden, newRangesAllowed] = partition__default.default(
|
|
77
|
-
result.newRanges,
|
|
78
|
-
({ name }) => forbiddenDuplicatesFilter(name)
|
|
79
|
-
);
|
|
80
|
-
if (newRangesForbidden.length) {
|
|
81
|
-
success = false;
|
|
82
|
-
}
|
|
83
|
-
logArray(
|
|
84
|
-
newRangesForbidden,
|
|
85
|
-
"The following packages must be deduplicated by updating dependencies in package.json",
|
|
86
|
-
(e) => ` ${e.name} @ ${e.oldRange} should be changed to ${e.newRange}`
|
|
87
|
-
);
|
|
88
|
-
logArray(
|
|
89
|
-
newRangesAllowed,
|
|
90
|
-
"The following packages can be deduplicated by updating dependencies in package.json",
|
|
91
|
-
(e) => ` ${e.name} @ ${e.oldRange} should be changed to ${e.newRange}`
|
|
92
|
-
);
|
|
93
|
-
if (!success) {
|
|
94
|
-
throw new Error("Failed versioning check");
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
function logArray(arr, header, each) {
|
|
98
|
-
if (arr.length === 0) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
console.log(header);
|
|
102
|
-
console.log();
|
|
103
|
-
for (const e of arr) {
|
|
104
|
-
console.log(each(e));
|
|
105
|
-
}
|
|
106
|
-
console.log();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
exports.default = lint;
|
|
110
|
-
exports.forbiddenDuplicatesFilter = forbiddenDuplicatesFilter;
|
|
111
|
-
exports.includedFilter = includedFilter;
|
|
112
|
-
//# sourceMappingURL=lint-DqMGmvsS.cjs.js.map
|