syncpack 13.0.1 → 14.0.0-alpha.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/README.md +0 -3
- package/index.js +48 -0
- package/package.json +16 -73
- package/schema.json +917 -0
- package/syncpack.d.ts +122 -0
- package/LICENSE +0 -20
- package/dist/bin-fix-mismatches/fix-mismatches.d.ts +0 -16
- package/dist/bin-fix-mismatches/fix-mismatches.js +0 -115
- package/dist/bin-fix-mismatches/index.d.ts +0 -2
- package/dist/bin-fix-mismatches/index.js +0 -33
- package/dist/bin-format/format.d.ts +0 -13
- package/dist/bin-format/format.js +0 -92
- package/dist/bin-format/index.d.ts +0 -2
- package/dist/bin-format/index.js +0 -28
- package/dist/bin-lint/index.d.ts +0 -2
- package/dist/bin-lint/index.js +0 -17
- package/dist/bin-lint/lint.d.ts +0 -11
- package/dist/bin-lint/lint.js +0 -52
- package/dist/bin-lint-semver-ranges/index.d.ts +0 -2
- package/dist/bin-lint-semver-ranges/index.js +0 -30
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +0 -16
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +0 -92
- package/dist/bin-list/index.d.ts +0 -2
- package/dist/bin-list/index.js +0 -27
- package/dist/bin-list/list.d.ts +0 -14
- package/dist/bin-list/list.js +0 -151
- package/dist/bin-list-mismatches/index.d.ts +0 -2
- package/dist/bin-list-mismatches/index.js +0 -29
- package/dist/bin-list-mismatches/list-mismatches.d.ts +0 -18
- package/dist/bin-list-mismatches/list-mismatches.js +0 -224
- package/dist/bin-prompt/index.d.ts +0 -2
- package/dist/bin-prompt/index.js +0 -29
- package/dist/bin-prompt/prompt.d.ts +0 -11
- package/dist/bin-prompt/prompt.js +0 -95
- package/dist/bin-set-semver-ranges/index.d.ts +0 -2
- package/dist/bin-set-semver-ranges/index.js +0 -32
- package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +0 -11
- package/dist/bin-set-semver-ranges/set-semver-ranges.js +0 -61
- package/dist/bin-update/effects.d.ts +0 -52
- package/dist/bin-update/effects.js +0 -282
- package/dist/bin-update/index.d.ts +0 -2
- package/dist/bin-update/index.js +0 -24
- package/dist/bin-update/update.d.ts +0 -6
- package/dist/bin-update/update.js +0 -59
- package/dist/bin.d.ts +0 -2
- package/dist/bin.js +0 -37
- package/dist/config/get-custom-types.d.ts +0 -19
- package/dist/config/get-custom-types.js +0 -57
- package/dist/config/get-enabled-types.d.ts +0 -17
- package/dist/config/get-enabled-types.js +0 -109
- package/dist/config/get-filter.d.ts +0 -2
- package/dist/config/get-filter.js +0 -10
- package/dist/config/get-indent.d.ts +0 -2
- package/dist/config/get-indent.js +0 -9
- package/dist/config/get-sort-az.d.ts +0 -2
- package/dist/config/get-sort-az.js +0 -8
- package/dist/config/get-sort-exports.d.ts +0 -2
- package/dist/config/get-sort-exports.js +0 -9
- package/dist/config/get-sort-first.d.ts +0 -2
- package/dist/config/get-sort-first.js +0 -8
- package/dist/config/get-source.d.ts +0 -2
- package/dist/config/get-source.js +0 -8
- package/dist/config/tag.d.ts +0 -3
- package/dist/config/tag.js +0 -2
- package/dist/config/types.d.ts +0 -134
- package/dist/config/types.js +0 -1
- package/dist/constants.d.ts +0 -106
- package/dist/constants.js +0 -103
- package/dist/error-handlers/default-error-handlers.d.ts +0 -25
- package/dist/error-handlers/default-error-handlers.js +0 -80
- package/dist/get-context/index.d.ts +0 -23
- package/dist/get-context/index.js +0 -18
- package/dist/get-context/lib/key-by.d.ts +0 -6
- package/dist/get-context/lib/key-by.js +0 -12
- package/dist/get-instances/index.d.ts +0 -14
- package/dist/get-instances/index.js +0 -42
- package/dist/get-instances/instance.d.ts +0 -26
- package/dist/get-instances/instance.js +0 -35
- package/dist/get-package-json-files/get-file-paths.d.ts +0 -21
- package/dist/get-package-json-files/get-file-paths.js +0 -22
- package/dist/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +0 -3
- package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +0 -12
- package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +0 -3
- package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +0 -14
- package/dist/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +0 -3
- package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +0 -16
- package/dist/get-package-json-files/get-patterns/index.d.ts +0 -8
- package/dist/get-package-json-files/get-patterns/index.js +0 -23
- package/dist/get-package-json-files/index.d.ts +0 -10
- package/dist/get-package-json-files/index.js +0 -8
- package/dist/get-package-json-files/package-json-file.d.ts +0 -54
- package/dist/get-package-json-files/package-json-file.js +0 -44
- package/dist/guards/can-add-to-group.d.ts +0 -5
- package/dist/guards/can-add-to-group.js +0 -58
- package/dist/guards/is-semver.d.ts +0 -2
- package/dist/guards/is-semver.js +0 -15
- package/dist/guards/is-valid-semver-range.d.ts +0 -3
- package/dist/guards/is-valid-semver-range.js +0 -14
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -1
- package/dist/io/ask-for-choice.d.ts +0 -14
- package/dist/io/ask-for-choice.js +0 -17
- package/dist/io/ask-for-input.d.ts +0 -13
- package/dist/io/ask-for-input.js +0 -14
- package/dist/io/exit-if-invalid.d.ts +0 -4
- package/dist/io/exit-if-invalid.js +0 -9
- package/dist/io/glob-sync.d.ts +0 -11
- package/dist/io/glob-sync.js +0 -14
- package/dist/io/index.d.ts +0 -27
- package/dist/io/index.js +0 -26
- package/dist/io/read-config-file.d.ts +0 -7
- package/dist/io/read-config-file.js +0 -24
- package/dist/io/read-file-sync.d.ts +0 -12
- package/dist/io/read-file-sync.js +0 -9
- package/dist/io/read-json-file-sync.d.ts +0 -31
- package/dist/io/read-json-file-sync.js +0 -23
- package/dist/io/read-yaml-file-sync.d.ts +0 -12
- package/dist/io/read-yaml-file-sync.js +0 -9
- package/dist/io/to-formatted-json.d.ts +0 -9
- package/dist/io/to-formatted-json.js +0 -32
- package/dist/io/write-file-sync.d.ts +0 -12
- package/dist/io/write-file-sync.js +0 -10
- package/dist/io/write-if-changed.d.ts +0 -5
- package/dist/io/write-if-changed.js +0 -9
- package/dist/lib/format-repository-url.d.ts +0 -1
- package/dist/lib/format-repository-url.js +0 -40
- package/dist/lib/get-group-header.d.ts +0 -10
- package/dist/lib/get-group-header.js +0 -25
- package/dist/lib/get.d.ts +0 -11
- package/dist/lib/get.js +0 -44
- package/dist/lib/pad-start.d.ts +0 -1
- package/dist/lib/pad-start.js +0 -3
- package/dist/lib/ring-buffer.d.ts +0 -10
- package/dist/lib/ring-buffer.js +0 -20
- package/dist/lib/set-semver-range.d.ts +0 -3
- package/dist/lib/set-semver-range.js +0 -24
- package/dist/lib/show-help-on-error.d.ts +0 -2
- package/dist/lib/show-help-on-error.js +0 -32
- package/dist/lib/sort-by-name.d.ts +0 -5
- package/dist/lib/sort-by-name.js +0 -9
- package/dist/lib/with-logger.d.ts +0 -2
- package/dist/lib/with-logger.js +0 -28
- package/dist/option.d.ts +0 -10
- package/dist/option.js +0 -30
- package/dist/report.d.ts +0 -131
- package/dist/report.js +0 -129
- package/dist/schema.json +0 -614
- package/dist/semver-group/create-semver-groups.d.ts +0 -4
- package/dist/semver-group/create-semver-groups.js +0 -83
- package/dist/semver-group/disabled.d.ts +0 -26
- package/dist/semver-group/disabled.js +0 -28
- package/dist/semver-group/filtered-out.d.ts +0 -27
- package/dist/semver-group/filtered-out.js +0 -34
- package/dist/semver-group/ignored.d.ts +0 -22
- package/dist/semver-group/ignored.js +0 -24
- package/dist/semver-group/index.d.ts +0 -20
- package/dist/semver-group/index.js +0 -7
- package/dist/semver-group/with-range.d.ts +0 -22
- package/dist/semver-group/with-range.js +0 -45
- package/dist/specifier/alias.d.ts +0 -17
- package/dist/specifier/alias.js +0 -21
- package/dist/specifier/base.d.ts +0 -41
- package/dist/specifier/base.js +0 -54
- package/dist/specifier/delete.d.ts +0 -17
- package/dist/specifier/delete.js +0 -16
- package/dist/specifier/exact.d.ts +0 -20
- package/dist/specifier/exact.js +0 -21
- package/dist/specifier/file.d.ts +0 -8
- package/dist/specifier/file.js +0 -7
- package/dist/specifier/hosted-git.d.ts +0 -15
- package/dist/specifier/hosted-git.js +0 -24
- package/dist/specifier/index.d.ts +0 -28
- package/dist/specifier/index.js +0 -75
- package/dist/specifier/latest.d.ts +0 -19
- package/dist/specifier/latest.js +0 -20
- package/dist/specifier/lib/non-semver-error.d.ts +0 -11
- package/dist/specifier/lib/non-semver-error.js +0 -6
- package/dist/specifier/lib/parse-specifier.d.ts +0 -14
- package/dist/specifier/lib/parse-specifier.js +0 -18
- package/dist/specifier/lib/specific-registry-result.d.ts +0 -9
- package/dist/specifier/lib/specific-registry-result.js +0 -1
- package/dist/specifier/range.d.ts +0 -19
- package/dist/specifier/range.js +0 -20
- package/dist/specifier/tag.d.ts +0 -11
- package/dist/specifier/tag.js +0 -10
- package/dist/specifier/unsupported.d.ts +0 -7
- package/dist/specifier/unsupported.js +0 -7
- package/dist/specifier/url.d.ts +0 -8
- package/dist/specifier/url.js +0 -7
- package/dist/specifier/workspace-protocol.d.ts +0 -19
- package/dist/specifier/workspace-protocol.js +0 -35
- package/dist/strategy/lib/get-non-empty-string-prop.d.ts +0 -3
- package/dist/strategy/lib/get-non-empty-string-prop.js +0 -7
- package/dist/strategy/name-and-version-props.d.ts +0 -12
- package/dist/strategy/name-and-version-props.js +0 -60
- package/dist/strategy/named-version-string.d.ts +0 -11
- package/dist/strategy/named-version-string.js +0 -52
- package/dist/strategy/unnamed-version-string.d.ts +0 -11
- package/dist/strategy/unnamed-version-string.js +0 -45
- package/dist/strategy/versions-by-name.d.ts +0 -11
- package/dist/strategy/versions-by-name.js +0 -27
- package/dist/version-group/banned.d.ts +0 -17
- package/dist/version-group/banned.js +0 -26
- package/dist/version-group/create-version-groups.d.ts +0 -4
- package/dist/version-group/create-version-groups.js +0 -118
- package/dist/version-group/filtered-out.d.ts +0 -19
- package/dist/version-group/filtered-out.js +0 -30
- package/dist/version-group/ignored.d.ts +0 -17
- package/dist/version-group/ignored.js +0 -23
- package/dist/version-group/index.d.ts +0 -26
- package/dist/version-group/index.js +0 -7
- package/dist/version-group/lib/clean.d.ts +0 -2
- package/dist/version-group/lib/clean.js +0 -6
- package/dist/version-group/lib/delete.d.ts +0 -2
- package/dist/version-group/lib/delete.js +0 -1
- package/dist/version-group/lib/get-highest-version.d.ts +0 -6
- package/dist/version-group/lib/get-highest-version.js +0 -8
- package/dist/version-group/lib/get-lowest-version.d.ts +0 -6
- package/dist/version-group/lib/get-lowest-version.js +0 -8
- package/dist/version-group/lib/get-preferred-version.d.ts +0 -5
- package/dist/version-group/lib/get-preferred-version.js +0 -53
- package/dist/version-group/lib/get-range-score.d.ts +0 -2
- package/dist/version-group/lib/get-range-score.js +0 -20
- package/dist/version-group/lib/group-by.d.ts +0 -5
- package/dist/version-group/lib/group-by.js +0 -11
- package/dist/version-group/pinned.d.ts +0 -17
- package/dist/version-group/pinned.js +0 -26
- package/dist/version-group/same-range.d.ts +0 -19
- package/dist/version-group/same-range.js +0 -96
- package/dist/version-group/snapped-to.d.ts +0 -17
- package/dist/version-group/snapped-to.js +0 -71
- package/dist/version-group/standard.d.ts +0 -18
- package/dist/version-group/standard.js +0 -119
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import { isArrayOfStrings } from 'tightrope/guard/is-array-of-strings.js';
|
|
3
|
-
import { isNonEmptyArray } from 'tightrope/guard/is-non-empty-array.js';
|
|
4
|
-
import { isNonEmptyString } from 'tightrope/guard/is-non-empty-string.js';
|
|
5
|
-
import { isObject } from 'tightrope/guard/is-object.js';
|
|
6
|
-
import { BannedVersionGroup } from './banned.js';
|
|
7
|
-
import { FilteredOutVersionGroup } from './filtered-out.js';
|
|
8
|
-
import { IgnoredVersionGroup } from './ignored.js';
|
|
9
|
-
import { VersionGroup } from './index.js';
|
|
10
|
-
import { PinnedVersionGroup } from './pinned.js';
|
|
11
|
-
import { SameRangeVersionGroup } from './same-range.js';
|
|
12
|
-
import { SnappedToVersionGroup } from './snapped-to.js';
|
|
13
|
-
import { StandardVersionGroup } from './standard.js';
|
|
14
|
-
export function createVersionGroups(ctx) {
|
|
15
|
-
const { rcFile } = ctx.config;
|
|
16
|
-
const versionGroups = [Effect.succeed(new FilteredOutVersionGroup(ctx))];
|
|
17
|
-
if (isNonEmptyArray(rcFile.versionGroups)) {
|
|
18
|
-
rcFile.versionGroups.forEach((config) => {
|
|
19
|
-
if (!isObject(config)) {
|
|
20
|
-
return versionGroups.push(Effect.fail(new VersionGroup.ConfigError({
|
|
21
|
-
config,
|
|
22
|
-
error: 'config is not an object',
|
|
23
|
-
})));
|
|
24
|
-
}
|
|
25
|
-
const mutuallyExclusiveProps = ['isBanned', 'isIgnored', 'pinVersion', 'snapTo', 'policy'].filter(prop => Boolean(config[prop]));
|
|
26
|
-
if (mutuallyExclusiveProps.length > 1) {
|
|
27
|
-
return versionGroups.push(Effect.fail(new VersionGroup.ConfigError({
|
|
28
|
-
config,
|
|
29
|
-
error: `it's unclear what kind of version group you want, as it contains both ${mutuallyExclusiveProps.join(' and ')}`,
|
|
30
|
-
})));
|
|
31
|
-
}
|
|
32
|
-
const label = isNonEmptyString(config.label) ? config.label : '';
|
|
33
|
-
const dependencyTypes = isArrayOfStrings(config.dependencyTypes)
|
|
34
|
-
? config.dependencyTypes
|
|
35
|
-
: ['**'];
|
|
36
|
-
const dependencies = isArrayOfStrings(config.dependencies)
|
|
37
|
-
? config.dependencies
|
|
38
|
-
: ['**'];
|
|
39
|
-
const packages = isArrayOfStrings(config.packages)
|
|
40
|
-
? config.packages
|
|
41
|
-
: ['**'];
|
|
42
|
-
const specifierTypes = isArrayOfStrings(config.specifierTypes)
|
|
43
|
-
? config.specifierTypes
|
|
44
|
-
: ['**'];
|
|
45
|
-
if (config.isBanned === true) {
|
|
46
|
-
versionGroups.push(Effect.succeed(new BannedVersionGroup({
|
|
47
|
-
dependencies,
|
|
48
|
-
dependencyTypes,
|
|
49
|
-
specifierTypes,
|
|
50
|
-
isBanned: true,
|
|
51
|
-
label,
|
|
52
|
-
packages,
|
|
53
|
-
})));
|
|
54
|
-
}
|
|
55
|
-
else if (config.isIgnored === true) {
|
|
56
|
-
versionGroups.push(Effect.succeed(new IgnoredVersionGroup({
|
|
57
|
-
dependencies,
|
|
58
|
-
dependencyTypes,
|
|
59
|
-
specifierTypes,
|
|
60
|
-
isIgnored: true,
|
|
61
|
-
label,
|
|
62
|
-
packages,
|
|
63
|
-
})));
|
|
64
|
-
}
|
|
65
|
-
else if (isNonEmptyString(config.pinVersion)) {
|
|
66
|
-
versionGroups.push(Effect.succeed(new PinnedVersionGroup({
|
|
67
|
-
dependencies,
|
|
68
|
-
dependencyTypes,
|
|
69
|
-
specifierTypes,
|
|
70
|
-
label,
|
|
71
|
-
packages,
|
|
72
|
-
pinVersion: config.pinVersion,
|
|
73
|
-
})));
|
|
74
|
-
}
|
|
75
|
-
else if (isArrayOfStrings(config.snapTo)) {
|
|
76
|
-
versionGroups.push(Effect.succeed(new SnappedToVersionGroup({
|
|
77
|
-
dependencies,
|
|
78
|
-
dependencyTypes,
|
|
79
|
-
specifierTypes,
|
|
80
|
-
label,
|
|
81
|
-
packages,
|
|
82
|
-
snapTo: config.snapTo,
|
|
83
|
-
})));
|
|
84
|
-
}
|
|
85
|
-
else if (config.policy === 'sameRange') {
|
|
86
|
-
versionGroups.push(Effect.succeed(new SameRangeVersionGroup(ctx, {
|
|
87
|
-
dependencies,
|
|
88
|
-
dependencyTypes,
|
|
89
|
-
specifierTypes,
|
|
90
|
-
label,
|
|
91
|
-
packages,
|
|
92
|
-
policy: config.policy,
|
|
93
|
-
})));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
versionGroups.push(Effect.succeed(new StandardVersionGroup(false, {
|
|
97
|
-
dependencies,
|
|
98
|
-
dependencyTypes,
|
|
99
|
-
specifierTypes,
|
|
100
|
-
label,
|
|
101
|
-
packages,
|
|
102
|
-
preferVersion: config.preferVersion === 'lowestSemver'
|
|
103
|
-
? 'lowestSemver'
|
|
104
|
-
: 'highestSemver',
|
|
105
|
-
})));
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
versionGroups.push(Effect.succeed(new StandardVersionGroup(true, {
|
|
110
|
-
dependencies: ['**'],
|
|
111
|
-
dependencyTypes: ['**'],
|
|
112
|
-
specifierTypes: ['**'],
|
|
113
|
-
label: 'Default Version Group',
|
|
114
|
-
packages: ['**'],
|
|
115
|
-
preferVersion: 'highestSemver',
|
|
116
|
-
})));
|
|
117
|
-
return Effect.all(versionGroups);
|
|
118
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { GroupConfig } from '../config/types.js';
|
|
3
|
-
import type { Ctx } from '../get-context/index.js';
|
|
4
|
-
import type { Instance } from '../get-instances/instance.js';
|
|
5
|
-
import { Report } from '../report.js';
|
|
6
|
-
declare const FilteredOutVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
7
|
-
readonly _tag: "FilteredOut";
|
|
8
|
-
};
|
|
9
|
-
export declare class FilteredOutVersionGroup extends FilteredOutVersionGroup_base<{
|
|
10
|
-
config: GroupConfig;
|
|
11
|
-
filter: string;
|
|
12
|
-
instances: Instance[];
|
|
13
|
-
}> {
|
|
14
|
-
groupType: string;
|
|
15
|
-
constructor(ctx: Ctx);
|
|
16
|
-
canAdd(instance: Instance): boolean;
|
|
17
|
-
inspectAll(): Effect.Effect<Report.Version.Group[]>;
|
|
18
|
-
}
|
|
19
|
-
export {};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Data, Effect } from 'effect';
|
|
2
|
-
import { getFilter } from '../config/get-filter.js';
|
|
3
|
-
import { Report } from '../report.js';
|
|
4
|
-
import { groupBy } from './lib/group-by.js';
|
|
5
|
-
export class FilteredOutVersionGroup extends Data.TaggedClass('FilteredOut') {
|
|
6
|
-
groupType = 'versionGroup';
|
|
7
|
-
constructor(ctx) {
|
|
8
|
-
super({
|
|
9
|
-
config: {
|
|
10
|
-
dependencies: ['**'],
|
|
11
|
-
dependencyTypes: ['**'],
|
|
12
|
-
label: 'Filtered out',
|
|
13
|
-
packages: ['**'],
|
|
14
|
-
},
|
|
15
|
-
filter: getFilter(ctx.config),
|
|
16
|
-
instances: [],
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
canAdd(instance) {
|
|
20
|
-
return instance.name.search(new RegExp(this.filter)) === -1;
|
|
21
|
-
}
|
|
22
|
-
inspectAll() {
|
|
23
|
-
return Effect.succeed(Object.entries(groupBy('name', this.instances)).map(([name, instances]) => ({
|
|
24
|
-
name,
|
|
25
|
-
reports: instances.map(instance =>
|
|
26
|
-
// ✓ is ignored and dismissed as valid
|
|
27
|
-
new Report.FilteredOut(instance)),
|
|
28
|
-
})));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { VersionGroupConfig } from '../config/types.js';
|
|
3
|
-
import type { Instance } from '../get-instances/instance.js';
|
|
4
|
-
import { Report } from '../report.js';
|
|
5
|
-
declare const IgnoredVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
6
|
-
readonly _tag: "Ignored";
|
|
7
|
-
};
|
|
8
|
-
export declare class IgnoredVersionGroup extends IgnoredVersionGroup_base<{
|
|
9
|
-
config: VersionGroupConfig.Ignored;
|
|
10
|
-
instances: Instance[];
|
|
11
|
-
}> {
|
|
12
|
-
groupType: string;
|
|
13
|
-
constructor(config: VersionGroupConfig.Ignored);
|
|
14
|
-
canAdd(_: Instance): boolean;
|
|
15
|
-
inspectAll(): Effect.Effect<Report.Version.Group[]>;
|
|
16
|
-
}
|
|
17
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Data, Effect } from 'effect';
|
|
2
|
-
import { Report } from '../report.js';
|
|
3
|
-
import { groupBy } from './lib/group-by.js';
|
|
4
|
-
export class IgnoredVersionGroup extends Data.TaggedClass('Ignored') {
|
|
5
|
-
groupType = 'versionGroup';
|
|
6
|
-
constructor(config) {
|
|
7
|
-
super({
|
|
8
|
-
config,
|
|
9
|
-
instances: [],
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
canAdd(_) {
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
inspectAll() {
|
|
16
|
-
return Effect.succeed(Object.entries(groupBy('name', this.instances)).map(([name, instances]) => ({
|
|
17
|
-
name,
|
|
18
|
-
reports: instances.map(instance =>
|
|
19
|
-
// ✓ is ignored and dismissed as valid
|
|
20
|
-
new Report.Ignored(instance)),
|
|
21
|
-
})));
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { BannedVersionGroup } from './banned.js';
|
|
2
|
-
import type { FilteredOutVersionGroup } from './filtered-out.js';
|
|
3
|
-
import type { IgnoredVersionGroup } from './ignored.js';
|
|
4
|
-
import type { PinnedVersionGroup } from './pinned.js';
|
|
5
|
-
import type { SameRangeVersionGroup } from './same-range.js';
|
|
6
|
-
import type { SnappedToVersionGroup } from './snapped-to.js';
|
|
7
|
-
import type { StandardVersionGroup } from './standard.js';
|
|
8
|
-
export declare namespace VersionGroup {
|
|
9
|
-
export type Banned = BannedVersionGroup;
|
|
10
|
-
export type FilteredOut = FilteredOutVersionGroup;
|
|
11
|
-
export type Ignored = IgnoredVersionGroup;
|
|
12
|
-
export type Pinned = PinnedVersionGroup;
|
|
13
|
-
export type SameRange = SameRangeVersionGroup;
|
|
14
|
-
export type SnappedTo = SnappedToVersionGroup;
|
|
15
|
-
export type Standard = StandardVersionGroup;
|
|
16
|
-
export type Any = Banned | FilteredOut | Ignored | Pinned | SameRange | SnappedTo | Standard;
|
|
17
|
-
const ConfigError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
18
|
-
readonly _tag: "VersionGroupConfigError";
|
|
19
|
-
};
|
|
20
|
-
export class ConfigError extends ConfigError_base<{
|
|
21
|
-
readonly config: unknown;
|
|
22
|
-
readonly error: string;
|
|
23
|
-
}> {
|
|
24
|
-
}
|
|
25
|
-
export {};
|
|
26
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const DELETE = Symbol('DELETE');
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Specifier } from '../../specifier/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* From an array of instances where every instance contains a valid semver
|
|
4
|
-
* version, return the highest version number
|
|
5
|
-
*/
|
|
6
|
-
export declare function getHighestVersion(specifiers: Specifier.Any[]): import("effect/Effect").Effect<Specifier.Any, import("../../specifier/lib/non-semver-error.js").NonSemverError, never>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { getPreferredVersion } from './get-preferred-version.js';
|
|
2
|
-
/**
|
|
3
|
-
* From an array of instances where every instance contains a valid semver
|
|
4
|
-
* version, return the highest version number
|
|
5
|
-
*/
|
|
6
|
-
export function getHighestVersion(specifiers) {
|
|
7
|
-
return getPreferredVersion('highestSemver', specifiers);
|
|
8
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Specifier } from '../../specifier/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* From an array of instances where every instance contains a valid semver
|
|
4
|
-
* version, return the lowest version number
|
|
5
|
-
*/
|
|
6
|
-
export declare function getLowestVersion(specifiers: Specifier.Any[]): import("effect/Effect").Effect<Specifier.Any, import("../../specifier/lib/non-semver-error.js").NonSemverError, never>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { getPreferredVersion } from './get-preferred-version.js';
|
|
2
|
-
/**
|
|
3
|
-
* From an array of instances where every instance contains a valid semver
|
|
4
|
-
* version, return the lowest version number
|
|
5
|
-
*/
|
|
6
|
-
export function getLowestVersion(specifiers) {
|
|
7
|
-
return getPreferredVersion('lowestSemver', specifiers);
|
|
8
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { VersionGroupConfig } from '../../config/types.js';
|
|
3
|
-
import type { Specifier } from '../../specifier/index.js';
|
|
4
|
-
import type { NonSemverError } from '../../specifier/lib/non-semver-error.js';
|
|
5
|
-
export declare function getPreferredVersion(preferVersion: VersionGroupConfig.Standard['preferVersion'], specifiers: Specifier.Any[]): Effect.Effect<Specifier.Any, NonSemverError>;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Effect, pipe } from 'effect';
|
|
2
|
-
import gt from 'semver/functions/gt.js';
|
|
3
|
-
import lt from 'semver/functions/lt.js';
|
|
4
|
-
import { clean } from './clean.js';
|
|
5
|
-
import { getRangeScore } from './get-range-score.js';
|
|
6
|
-
export function getPreferredVersion(preferVersion, specifiers) {
|
|
7
|
-
return pipe(
|
|
8
|
-
// every instance must have a semver version
|
|
9
|
-
Effect.all(specifiers.map(specifier => pipe(specifier.getSemver(), Effect.map(semver => ({ semver, specifier }))))),
|
|
10
|
-
// comparing semver can error on some loose ranges, all must succeed
|
|
11
|
-
Effect.map(semvers => semvers.sort((a, b) => compareSemver(a.semver, b.semver))),
|
|
12
|
-
// get the preferred value from the list
|
|
13
|
-
Effect.map(sorted => sorted[preferVersion === 'lowestSemver' ? 0 : sorted.length - 1]),
|
|
14
|
-
// return just the specifier
|
|
15
|
-
Effect.map(preferred => preferred?.specifier));
|
|
16
|
-
}
|
|
17
|
-
const EQ = 0;
|
|
18
|
-
const LT = -1;
|
|
19
|
-
const GT = 1;
|
|
20
|
-
function compareSemver(a, b) {
|
|
21
|
-
if (a.startsWith('workspace:')) {
|
|
22
|
-
return LT;
|
|
23
|
-
}
|
|
24
|
-
if (b.startsWith('workspace:')) {
|
|
25
|
-
return GT;
|
|
26
|
-
}
|
|
27
|
-
if (a === b) {
|
|
28
|
-
return EQ;
|
|
29
|
-
}
|
|
30
|
-
if (a === '*') {
|
|
31
|
-
return GT;
|
|
32
|
-
}
|
|
33
|
-
if (b === '*') {
|
|
34
|
-
return LT;
|
|
35
|
-
}
|
|
36
|
-
const cleanA = clean(a);
|
|
37
|
-
const cleanB = clean(b);
|
|
38
|
-
if (gt(cleanA, cleanB)) {
|
|
39
|
-
return GT;
|
|
40
|
-
}
|
|
41
|
-
if (lt(cleanA, cleanB)) {
|
|
42
|
-
return LT;
|
|
43
|
-
}
|
|
44
|
-
const scoreA = getRangeScore(a);
|
|
45
|
-
const scoreB = getRangeScore(b);
|
|
46
|
-
if (scoreA < scoreB) {
|
|
47
|
-
return LT;
|
|
48
|
-
}
|
|
49
|
-
if (scoreA > scoreB) {
|
|
50
|
-
return GT;
|
|
51
|
-
}
|
|
52
|
-
return EQ;
|
|
53
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { RANGE } from '../../constants.js';
|
|
2
|
-
const scoresByRange = {
|
|
3
|
-
[RANGE.ANY]: 9,
|
|
4
|
-
[RANGE.WORKSPACE]: 8,
|
|
5
|
-
[RANGE.GT]: 7,
|
|
6
|
-
[RANGE.GTE]: 6,
|
|
7
|
-
[RANGE.MINOR]: 5,
|
|
8
|
-
[RANGE.LOOSE]: 4,
|
|
9
|
-
[RANGE.PATCH]: 3,
|
|
10
|
-
[RANGE.EXACT]: 2,
|
|
11
|
-
[RANGE.LTE]: 1,
|
|
12
|
-
[RANGE.LT]: 0,
|
|
13
|
-
};
|
|
14
|
-
/** Rank a Semver Range according to its greediness */
|
|
15
|
-
export function getRangeScore(version) {
|
|
16
|
-
const range = version.indexOf('.x') !== -1
|
|
17
|
-
? RANGE.LOOSE
|
|
18
|
-
: version.slice(0, version.search(/[0-9]/));
|
|
19
|
-
return scoresByRange[range] || 0;
|
|
20
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert an array of objects to an object, where each property of the new
|
|
3
|
-
* object is an array whose members share the same value for the given key.
|
|
4
|
-
*/
|
|
5
|
-
export function groupBy(key, array) {
|
|
6
|
-
return array.reduce((objectsByKeyValue, obj) => {
|
|
7
|
-
const value = obj[key];
|
|
8
|
-
objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);
|
|
9
|
-
return objectsByKeyValue;
|
|
10
|
-
}, {});
|
|
11
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { VersionGroupConfig } from '../config/types.js';
|
|
3
|
-
import type { Instance } from '../get-instances/instance.js';
|
|
4
|
-
import { Report } from '../report.js';
|
|
5
|
-
declare const PinnedVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
6
|
-
readonly _tag: "Pinned";
|
|
7
|
-
};
|
|
8
|
-
export declare class PinnedVersionGroup extends PinnedVersionGroup_base<{
|
|
9
|
-
config: VersionGroupConfig.Pinned;
|
|
10
|
-
instances: Instance[];
|
|
11
|
-
}> {
|
|
12
|
-
groupType: string;
|
|
13
|
-
constructor(config: VersionGroupConfig.Pinned);
|
|
14
|
-
canAdd(_: Instance): boolean;
|
|
15
|
-
inspectAll(): Effect.Effect<Report.Version.Group[]>;
|
|
16
|
-
}
|
|
17
|
-
export {};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Data, Effect, pipe } from 'effect';
|
|
2
|
-
import { Report } from '../report.js';
|
|
3
|
-
import { Specifier } from '../specifier/index.js';
|
|
4
|
-
import { groupBy } from './lib/group-by.js';
|
|
5
|
-
export class PinnedVersionGroup extends Data.TaggedClass('Pinned') {
|
|
6
|
-
groupType = 'versionGroup';
|
|
7
|
-
constructor(config) {
|
|
8
|
-
super({
|
|
9
|
-
config,
|
|
10
|
-
instances: [],
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
canAdd(_) {
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
inspectAll() {
|
|
17
|
-
return Effect.all(Object.entries(groupBy('name', this.instances)).map(([name, instances]) => pipe(instances, Effect.forEach(instance => pipe(Effect.succeed(Specifier.create(instance, this.config.pinVersion)), Effect.map(expected => instance.rawSpecifier.raw === expected.raw
|
|
18
|
-
? // ✓ pinned takes precedence over any semver group
|
|
19
|
-
// ✓ current version matches expected
|
|
20
|
-
new Report.Valid(expected)
|
|
21
|
-
: // ✓ pinned takes precedence over any semver group
|
|
22
|
-
// ✘ current version mismatches expected
|
|
23
|
-
// ✓ is a mismatch we can auto-fix
|
|
24
|
-
new Report.PinnedMismatch(expected)))), Effect.map(reports => ({ name, reports })))));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { VersionGroupConfig } from '../config/types.js';
|
|
3
|
-
import type { Ctx } from '../get-context/index.js';
|
|
4
|
-
import type { Instance } from '../get-instances/instance.js';
|
|
5
|
-
import { Report } from '../report.js';
|
|
6
|
-
declare const SameRangeVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
7
|
-
readonly _tag: "SameRange";
|
|
8
|
-
};
|
|
9
|
-
export declare class SameRangeVersionGroup extends SameRangeVersionGroup_base<{
|
|
10
|
-
ctx: Ctx;
|
|
11
|
-
config: VersionGroupConfig.SameRange;
|
|
12
|
-
instances: Instance[];
|
|
13
|
-
}> {
|
|
14
|
-
groupType: string;
|
|
15
|
-
constructor(ctx: Ctx, config: VersionGroupConfig.SameRange);
|
|
16
|
-
canAdd(_: Instance): boolean;
|
|
17
|
-
inspectAll(): Effect.Effect<Report.Version.Group[]>;
|
|
18
|
-
}
|
|
19
|
-
export {};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { Data, Effect, pipe } from 'effect';
|
|
2
|
-
import intersects from 'semver/ranges/intersects.js';
|
|
3
|
-
import { uniq } from 'tightrope/array/uniq.js';
|
|
4
|
-
import { Report } from '../report.js';
|
|
5
|
-
import { Specifier } from '../specifier/index.js';
|
|
6
|
-
import { groupBy } from './lib/group-by.js';
|
|
7
|
-
export class SameRangeVersionGroup extends Data.TaggedClass('SameRange') {
|
|
8
|
-
groupType = 'versionGroup';
|
|
9
|
-
constructor(ctx, config) {
|
|
10
|
-
super({
|
|
11
|
-
ctx,
|
|
12
|
-
config,
|
|
13
|
-
instances: [],
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
canAdd(_) {
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
inspectAll() {
|
|
20
|
-
return Effect.all(Object.entries(groupBy('name', this.instances)).flatMap(([name, instances]) => pipe(instances, Effect.partition(instance => pipe(Effect.succeed(Specifier.create(instance, instance.rawSpecifier.raw)), Effect.flatMap(specifier => pipe(specifier.getSemver(), Effect.matchEffect({
|
|
21
|
-
onFailure: () => Effect.fail(
|
|
22
|
-
// ✘ expected version is not semver
|
|
23
|
-
// ✘ is a mismatch we can't auto-fix
|
|
24
|
-
new Report.UnsupportedMismatch(specifier.instance)),
|
|
25
|
-
onSuccess: () => pipe(specifier.instance.semverGroup.getFixed(specifier), Effect.matchEffect({
|
|
26
|
-
onFailure: () => Effect.fail(
|
|
27
|
-
// ✓ expected version is semver
|
|
28
|
-
// ✘ expected version is not fixable by its semver group
|
|
29
|
-
// ✘ is a mismatch we can't auto-fix
|
|
30
|
-
new Report.UnsupportedMismatch(specifier.instance)),
|
|
31
|
-
onSuccess: valid => specifier.instance.rawSpecifier.raw === valid.raw
|
|
32
|
-
? Effect.succeed(
|
|
33
|
-
// ✓ expected version is semver
|
|
34
|
-
// ✓ expected version matches its semver group
|
|
35
|
-
// ✓ current version matches expected
|
|
36
|
-
new Report.Valid(specifier))
|
|
37
|
-
: Effect.fail(
|
|
38
|
-
// ✓ expected version is semver
|
|
39
|
-
// ✓ expected version matches its semver group
|
|
40
|
-
// ✘ current version mismatches expected
|
|
41
|
-
// ✓ is a mismatch we can auto-fix
|
|
42
|
-
new Report.SemverRangeMismatch(valid)),
|
|
43
|
-
})),
|
|
44
|
-
}))))), Effect.map(([allMismatches, allMatches]) => allMismatches.length === 0
|
|
45
|
-
? allMatches.map(thisMatch => {
|
|
46
|
-
if (thisMatch.specifier.instance.strategy.name === 'local') {
|
|
47
|
-
// ✓ every instance is valid on its own
|
|
48
|
-
// ✓ expected version is semver
|
|
49
|
-
// ! is the original local package
|
|
50
|
-
// ✓ others must match this, not the other way around
|
|
51
|
-
return thisMatch;
|
|
52
|
-
}
|
|
53
|
-
const mismatches = getRangeMismatches(this.ctx, thisMatch, allMatches);
|
|
54
|
-
if (mismatches.length === 0) {
|
|
55
|
-
// ✓ every instance is valid on its own
|
|
56
|
-
// ✓ expected version is semver
|
|
57
|
-
// ✓ expected version matches its semver group
|
|
58
|
-
// ✓ current version matches expected
|
|
59
|
-
// ! is not the original local package
|
|
60
|
-
// ✓ current specifier matches every other specifier
|
|
61
|
-
return thisMatch;
|
|
62
|
-
}
|
|
63
|
-
// ✓ every instance is valid on its own
|
|
64
|
-
// ✓ expected version is semver
|
|
65
|
-
// ✓ expected version matches its semver group
|
|
66
|
-
// ✓ current version matches expected
|
|
67
|
-
// ! is not the original local package
|
|
68
|
-
// ✘ current specifier does not match every other specifier
|
|
69
|
-
return new Report.SameRangeMismatch(thisMatch.specifier.instance, uniq(mismatches.map(report => String(report.specifier.instance.rawSpecifier.raw))));
|
|
70
|
-
})
|
|
71
|
-
: // ✘ not every instance is valid on its own
|
|
72
|
-
// ! report on their validity individually ! when all are valid
|
|
73
|
-
// they can progress to being checked for having compatible
|
|
74
|
-
// ranges
|
|
75
|
-
[...allMatches, ...allMismatches]), Effect.map(reports => ({ name, reports })))));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/** Find all ranges/versions which this semver version does not cover */
|
|
79
|
-
function getRangeMismatches(ctx, report, others) {
|
|
80
|
-
return others.filter(other => !matchesRange(ctx, report, other));
|
|
81
|
-
}
|
|
82
|
-
/** Does semver version `a` match semver version `b`? */
|
|
83
|
-
function matchesRange(ctx, a, b) {
|
|
84
|
-
const loose = true;
|
|
85
|
-
return intersects(unwrapSemver(ctx, a.specifier), unwrapSemver(ctx, b.specifier), loose);
|
|
86
|
-
}
|
|
87
|
-
/** Get the semver version synchronously from a specifier known to contain semver */
|
|
88
|
-
function unwrapSemver(ctx, specifier) {
|
|
89
|
-
if (specifier._tag === 'Range' || specifier._tag === 'Exact') {
|
|
90
|
-
return specifier.raw;
|
|
91
|
-
}
|
|
92
|
-
if (specifier._tag === 'WorkspaceProtocol') {
|
|
93
|
-
return Effect.runSync(specifier.getSemverEquivalent(ctx));
|
|
94
|
-
}
|
|
95
|
-
return Effect.runSync(specifier.getSemver());
|
|
96
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Effect } from 'effect';
|
|
2
|
-
import type { VersionGroupConfig } from '../config/types.js';
|
|
3
|
-
import type { Instance } from '../get-instances/instance.js';
|
|
4
|
-
import { Report } from '../report.js';
|
|
5
|
-
declare const SnappedToVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
|
|
6
|
-
readonly _tag: "SnappedTo";
|
|
7
|
-
};
|
|
8
|
-
export declare class SnappedToVersionGroup extends SnappedToVersionGroup_base<{
|
|
9
|
-
config: VersionGroupConfig.SnappedTo;
|
|
10
|
-
instances: Instance[];
|
|
11
|
-
}> {
|
|
12
|
-
groupType: string;
|
|
13
|
-
constructor(config: VersionGroupConfig.SnappedTo);
|
|
14
|
-
canAdd(_: Instance): boolean;
|
|
15
|
-
inspectAll(): Effect.Effect<Report.Version.Group[]>;
|
|
16
|
-
}
|
|
17
|
-
export {};
|