syncpack 10.9.3 → 12.0.0-alpha.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/dist/bin-fix-mismatches/fix-mismatches.d.ts +15 -3
- package/dist/bin-fix-mismatches/fix-mismatches.js +120 -36
- package/dist/bin-fix-mismatches/index.js +12 -32
- package/dist/bin-format/format.d.ts +11 -3
- package/dist/bin-format/format.js +46 -61
- package/dist/bin-format/index.js +11 -31
- package/dist/bin-lint/index.js +8 -28
- package/dist/bin-lint/lint.d.ts +10 -3
- package/dist/bin-lint/lint.js +12 -36
- package/dist/bin-lint-semver-ranges/index.js +11 -39
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +15 -3
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +94 -35
- package/dist/bin-list/index.js +11 -31
- package/dist/bin-list/list.d.ts +11 -3
- package/dist/bin-list/list.js +121 -35
- package/dist/bin-list-mismatches/index.js +11 -31
- package/dist/bin-list-mismatches/list-mismatches.d.ts +18 -3
- package/dist/bin-list-mismatches/list-mismatches.js +254 -35
- package/dist/bin-prompt/index.js +15 -31
- package/dist/bin-prompt/prompt.d.ts +10 -3
- package/dist/bin-prompt/prompt.js +83 -34
- package/dist/bin-set-semver-ranges/index.js +12 -40
- package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +10 -3
- package/dist/bin-set-semver-ranges/set-semver-ranges.js +50 -36
- package/dist/bin-update/effects.d.ts +45 -5
- package/dist/bin-update/effects.js +214 -128
- package/dist/bin-update/index.js +4 -27
- package/dist/bin-update/update.d.ts +5 -3
- package/dist/bin-update/update.js +52 -38
- package/dist/bin.js +0 -1
- package/dist/config/get-custom-types.d.ts +11 -1
- package/dist/config/get-custom-types.js +26 -21
- package/dist/config/get-enabled-types.d.ts +10 -6
- package/dist/config/get-enabled-types.js +84 -66
- package/dist/config/get-indent.js +1 -1
- package/dist/config/tag.d.ts +3 -0
- package/dist/config/tag.js +5 -0
- package/dist/config/types.d.ts +8 -11
- package/dist/config/types.js +0 -26
- package/dist/constants.d.ts +7 -5
- package/dist/constants.js +15 -14
- package/dist/create-program/effects.d.ts +51 -29
- package/dist/error-handlers/default-error-handlers.d.ts +38 -2
- package/dist/error-handlers/default-error-handlers.js +83 -35
- package/dist/get-context/index.d.ts +12 -6
- package/dist/get-context/index.js +13 -30
- package/dist/get-context/lib/key-by.d.ts +6 -0
- package/dist/get-context/lib/key-by.js +16 -0
- package/dist/get-instances/index.d.ts +14 -0
- package/dist/get-instances/index.js +46 -0
- package/dist/get-instances/instance.d.ts +25 -0
- package/dist/get-instances/instance.js +20 -0
- package/dist/get-package-json-files/get-file-paths.d.ts +6 -7
- package/dist/get-package-json-files/get-file-paths.js +10 -33
- package/dist/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +3 -4
- package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +6 -32
- package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +3 -4
- package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +6 -32
- package/dist/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +3 -4
- package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +11 -40
- package/dist/get-package-json-files/get-patterns/index.d.ts +3 -5
- package/dist/get-package-json-files/get-patterns/index.js +6 -33
- package/dist/get-package-json-files/index.d.ts +6 -5
- package/dist/get-package-json-files/index.js +4 -28
- package/dist/get-package-json-files/package-json-file.d.ts +16 -16
- package/dist/get-package-json-files/package-json-file.js +13 -18
- package/dist/guards/can-add-to-group.d.ts +5 -4
- package/dist/guards/can-add-to-group.js +40 -6
- package/dist/guards/is-semver.d.ts +1 -1
- package/dist/guards/is-semver.js +1 -1
- package/dist/guards/is-valid-semver-range.d.ts +1 -1
- package/dist/guards/is-valid-semver-range.js +1 -1
- package/dist/io/ask-for-choice.d.ts +14 -0
- package/dist/io/ask-for-choice.js +22 -0
- package/dist/io/ask-for-input.d.ts +13 -0
- package/dist/io/ask-for-input.js +19 -0
- package/dist/io/exit-if-invalid.d.ts +4 -0
- package/dist/io/exit-if-invalid.js +13 -0
- package/dist/io/glob-sync.d.ts +11 -0
- package/dist/io/glob-sync.js +19 -0
- package/dist/io/index.d.ts +28 -0
- package/dist/{env/exit-if-invalid.js → io/index.js} +27 -9
- package/dist/io/read-config-file-sync.d.ts +7 -0
- package/dist/io/read-config-file-sync.js +26 -0
- package/dist/io/read-file-sync.d.ts +12 -0
- package/dist/io/read-file-sync.js +14 -0
- package/dist/io/read-json-file-sync.d.ts +30 -0
- package/dist/io/read-json-file-sync.js +25 -0
- package/dist/io/read-yaml-file-sync.d.ts +12 -0
- package/dist/io/read-yaml-file-sync.js +14 -0
- package/dist/io/write-file-sync.d.ts +12 -0
- package/dist/io/write-file-sync.js +15 -0
- package/dist/{env → io}/write-if-changed.d.ts +4 -4
- package/dist/io/write-if-changed.js +45 -0
- package/dist/lib/get-group-header.d.ts +10 -0
- package/dist/lib/get-group-header.js +31 -0
- package/dist/lib/get.d.ts +11 -0
- package/dist/lib/get.js +40 -0
- package/dist/lib/pad-start.d.ts +1 -0
- package/dist/lib/pad-start.js +7 -0
- package/dist/lib/ring-buffer.d.ts +10 -0
- package/dist/lib/ring-buffer.js +22 -0
- package/dist/lib/set-semver-range.d.ts +1 -1
- package/dist/lib/set-semver-range.js +7 -11
- package/dist/lib/with-logger.d.ts +2 -0
- package/dist/lib/with-logger.js +35 -0
- package/dist/option.d.ts +0 -1
- package/dist/option.js +0 -4
- package/dist/report.d.ts +166 -0
- package/dist/report.js +67 -0
- package/dist/schema.json +392 -0
- package/dist/semver-group/create-semver-groups.d.ts +4 -0
- package/dist/semver-group/create-semver-groups.js +77 -0
- package/dist/semver-group/disabled.d.ts +26 -0
- package/dist/semver-group/disabled.js +34 -0
- package/dist/semver-group/filtered-out.d.ts +27 -0
- package/dist/semver-group/filtered-out.js +40 -0
- package/dist/semver-group/ignored.d.ts +22 -0
- package/dist/semver-group/ignored.js +30 -0
- package/dist/semver-group/index.d.ts +22 -0
- package/dist/semver-group/index.js +10 -0
- package/dist/semver-group/with-range.d.ts +22 -0
- package/dist/semver-group/with-range.js +57 -0
- package/dist/specifier/alias.d.ts +15 -0
- package/dist/specifier/alias.js +25 -0
- package/dist/specifier/base.d.ts +39 -0
- package/dist/specifier/base.js +38 -0
- package/dist/specifier/delete.d.ts +15 -0
- package/dist/specifier/delete.js +16 -0
- package/dist/specifier/file.d.ts +6 -0
- package/dist/specifier/file.js +12 -0
- package/dist/specifier/hosted-git.d.ts +13 -0
- package/dist/specifier/hosted-git.js +27 -0
- package/dist/specifier/index.d.ts +27 -0
- package/dist/specifier/index.js +62 -0
- package/dist/specifier/lib/non-semver-error.d.ts +11 -0
- package/dist/specifier/lib/non-semver-error.js +10 -0
- package/dist/specifier/lib/parse-specifier.d.ts +14 -0
- package/dist/specifier/lib/parse-specifier.js +23 -0
- package/dist/specifier/lib/specific-registry-result.d.ts +9 -0
- package/dist/specifier/lib/specific-registry-result.js +2 -0
- package/dist/specifier/range.d.ts +18 -0
- package/dist/specifier/range.js +26 -0
- package/dist/specifier/tag.d.ts +9 -0
- package/dist/specifier/tag.js +15 -0
- package/dist/specifier/unsupported.d.ts +5 -0
- package/dist/specifier/unsupported.js +12 -0
- package/dist/specifier/url.d.ts +6 -0
- package/dist/specifier/url.js +13 -0
- package/dist/specifier/version.d.ts +18 -0
- package/dist/specifier/version.js +26 -0
- package/dist/specifier/workspace-protocol.d.ts +17 -0
- package/dist/specifier/workspace-protocol.js +38 -0
- package/dist/strategy/lib/get-non-empty-string-prop.d.ts +2 -2
- package/dist/strategy/lib/get-non-empty-string-prop.js +4 -5
- package/dist/strategy/name-and-version-props.d.ts +4 -4
- package/dist/strategy/name-and-version-props.js +32 -21
- package/dist/strategy/named-version-string.d.ts +4 -4
- package/dist/strategy/named-version-string.js +22 -24
- package/dist/strategy/unnamed-version-string.d.ts +4 -4
- package/dist/strategy/unnamed-version-string.js +20 -21
- package/dist/strategy/versions-by-name.d.ts +4 -4
- package/dist/strategy/versions-by-name.js +9 -11
- package/dist/version-group/banned.d.ts +17 -0
- package/dist/version-group/banned.js +32 -0
- package/dist/version-group/create-version-groups.d.ts +4 -0
- package/dist/version-group/create-version-groups.js +107 -0
- package/dist/version-group/filtered-out.d.ts +19 -0
- package/dist/version-group/filtered-out.js +34 -0
- package/dist/version-group/ignored.d.ts +17 -0
- package/dist/version-group/ignored.js +27 -0
- package/dist/version-group/index.d.ts +28 -0
- package/dist/version-group/index.js +10 -0
- package/dist/version-group/lib/get-highest-version.d.ts +6 -0
- package/dist/version-group/lib/get-highest-version.js +12 -0
- package/dist/version-group/lib/get-lowest-version.d.ts +6 -0
- package/dist/version-group/lib/get-lowest-version.js +12 -0
- package/dist/version-group/lib/get-preferred-version.d.ts +5 -0
- package/dist/{get-version-groups/lib/compare-semver.js → version-group/lib/get-preferred-version.js} +14 -2
- package/dist/version-group/lib/group-by.d.ts +5 -0
- package/dist/{get-version-groups → version-group}/lib/group-by.js +4 -0
- package/dist/version-group/pinned.d.ts +17 -0
- package/dist/version-group/pinned.js +30 -0
- package/dist/version-group/same-range.d.ts +19 -0
- package/dist/version-group/same-range.js +108 -0
- package/dist/version-group/snapped-to.d.ts +17 -0
- package/dist/version-group/snapped-to.js +83 -0
- package/dist/version-group/standard.d.ts +18 -0
- package/dist/version-group/standard.js +131 -0
- package/package.json +28 -25
- package/dist/bin-fix-mismatches/effects.d.ts +0 -2
- package/dist/bin-fix-mismatches/effects.js +0 -112
- package/dist/bin-format/format-cli.d.ts +0 -4
- package/dist/bin-format/format-cli.js +0 -42
- package/dist/bin-lint-semver-ranges/effects.d.ts +0 -2
- package/dist/bin-lint-semver-ranges/effects.js +0 -70
- package/dist/bin-list/effects.d.ts +0 -2
- package/dist/bin-list/effects.js +0 -114
- package/dist/bin-list-mismatches/effects.d.ts +0 -2
- package/dist/bin-list-mismatches/effects.js +0 -136
- package/dist/bin-prompt/effects.d.ts +0 -2
- package/dist/bin-prompt/effects.js +0 -110
- package/dist/bin-set-semver-ranges/effects.d.ts +0 -2
- package/dist/bin-set-semver-ranges/effects.js +0 -61
- package/dist/config/get-semver-range.d.ts +0 -3
- package/dist/config/get-semver-range.js +0 -12
- package/dist/create-program/semver-ranges.d.ts +0 -7
- package/dist/create-program/semver-ranges.js +0 -55
- package/dist/create-program/versions.d.ts +0 -7
- package/dist/create-program/versions.js +0 -70
- package/dist/env/create-env.d.ts +0 -21
- package/dist/env/create-env.js +0 -81
- package/dist/env/default-env.d.ts +0 -18
- package/dist/env/default-env.js +0 -96
- package/dist/env/exit-if-invalid.d.ts +0 -4
- package/dist/env/tags.d.ts +0 -58
- package/dist/env/tags.js +0 -50
- package/dist/env/write-if-changed.js +0 -73
- package/dist/error-handlers/create-error-handlers.d.ts +0 -19
- package/dist/error-handlers/create-error-handlers.js +0 -57
- package/dist/get-package-json-files/get-patterns/read-json-safe.d.ts +0 -23
- package/dist/get-package-json-files/get-patterns/read-json-safe.js +0 -43
- package/dist/get-semver-groups/filtered-out.d.ts +0 -19
- package/dist/get-semver-groups/filtered-out.js +0 -55
- package/dist/get-semver-groups/ignored.d.ts +0 -17
- package/dist/get-semver-groups/ignored.js +0 -48
- package/dist/get-semver-groups/index.d.ts +0 -84
- package/dist/get-semver-groups/index.js +0 -139
- package/dist/get-semver-groups/with-range.d.ts +0 -18
- package/dist/get-semver-groups/with-range.js +0 -79
- package/dist/get-version-groups/banned.d.ts +0 -17
- package/dist/get-version-groups/banned.js +0 -50
- package/dist/get-version-groups/filtered-out.d.ts +0 -19
- package/dist/get-version-groups/filtered-out.js +0 -57
- package/dist/get-version-groups/ignored.d.ts +0 -17
- package/dist/get-version-groups/ignored.js +0 -50
- package/dist/get-version-groups/index.d.ts +0 -187
- package/dist/get-version-groups/index.js +0 -246
- package/dist/get-version-groups/lib/compare-semver.d.ts +0 -1
- package/dist/get-version-groups/lib/get-highest-version.d.ts +0 -2
- package/dist/get-version-groups/lib/get-highest-version.js +0 -13
- package/dist/get-version-groups/lib/get-lowest-version.d.ts +0 -2
- package/dist/get-version-groups/lib/get-lowest-version.js +0 -13
- package/dist/get-version-groups/lib/get-unique-specifiers.d.ts +0 -2
- package/dist/get-version-groups/lib/get-unique-specifiers.js +0 -11
- package/dist/get-version-groups/lib/group-by.d.ts +0 -1
- package/dist/get-version-groups/pinned.d.ts +0 -17
- package/dist/get-version-groups/pinned.js +0 -66
- package/dist/get-version-groups/same-range.d.ts +0 -17
- package/dist/get-version-groups/same-range.js +0 -73
- package/dist/get-version-groups/snapped-to.d.ts +0 -17
- package/dist/get-version-groups/snapped-to.js +0 -78
- package/dist/get-version-groups/standard.d.ts +0 -18
- package/dist/get-version-groups/standard.js +0 -109
- package/dist/guards/is-loose-semver.d.ts +0 -2
- package/dist/guards/is-loose-semver.js +0 -10
- package/dist/instance/create.d.ts +0 -4
- package/dist/instance/create.js +0 -142
- package/dist/instance/index.d.ts +0 -122
- package/dist/instance/index.js +0 -154
- package/dist/lib/$R.d.ts +0 -12
- package/dist/lib/$R.js +0 -34
- package/dist/lib/log-group-header.d.ts +0 -6
- package/dist/lib/log-group-header.js +0 -34
- package/dist/lib/log-verbose.d.ts +0 -1
- package/dist/lib/log-verbose.js +0 -24
- package/dist/lib/split-name-and-version.d.ts +0 -5
- package/dist/lib/split-name-and-version.js +0 -12
- /package/dist/{get-version-groups → version-group}/lib/clean.d.ts +0 -0
- /package/dist/{get-version-groups → version-group}/lib/clean.js +0 -0
- /package/dist/{get-version-groups → version-group}/lib/delete.d.ts +0 -0
- /package/dist/{get-version-groups → version-group}/lib/delete.js +0 -0
- /package/dist/{get-version-groups → version-group}/lib/get-range-score.d.ts +0 -0
- /package/dist/{get-version-groups → version-group}/lib/get-range-score.js +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UnnamedVersionStringStrategy = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const tap_1 = require("tightrope/result/tap");
|
|
9
|
-
const delete_1 = require("../get-version-groups/lib/delete");
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
|
|
6
|
+
const get_1 = require("../lib/get");
|
|
7
|
+
const delete_1 = require("../version-group/lib/delete");
|
|
10
8
|
const get_non_empty_string_prop_1 = require("./lib/get-non-empty-string-prop");
|
|
9
|
+
const getOptionOfNonEmptyObject = effect_1.Option.liftPredicate((is_non_empty_object_1.isNonEmptyObject));
|
|
11
10
|
class UnnamedVersionStringStrategy {
|
|
12
11
|
constructor(name, path) {
|
|
13
12
|
this._tag = 'version';
|
|
@@ -15,33 +14,33 @@ class UnnamedVersionStringStrategy {
|
|
|
15
14
|
this.path = path;
|
|
16
15
|
}
|
|
17
16
|
read(file) {
|
|
18
|
-
|
|
19
|
-
return (0, Function_1.pipe)(
|
|
17
|
+
return (0, effect_1.pipe)(
|
|
20
18
|
// get version prop
|
|
21
|
-
(0, get_non_empty_string_prop_1.getNonEmptyStringProp)(path, file),
|
|
19
|
+
(0, get_non_empty_string_prop_1.getNonEmptyStringProp)(this.path, file),
|
|
22
20
|
// if it is a non empty string, we can read it
|
|
23
|
-
|
|
24
|
-
const name = path.split('.').slice(-1).join('');
|
|
21
|
+
effect_1.Effect.map((version) => {
|
|
22
|
+
const name = this.path.split('.').slice(-1).join('');
|
|
25
23
|
return [[name, version]];
|
|
26
|
-
}))
|
|
24
|
+
}), effect_1.Effect.tapError(() => effect_1.Effect.logDebug(`UnnamedVersionStringStrategy#${this.name} found nothing at <${file.jsonFile.shortPath}>.${this.path}`)),
|
|
25
|
+
// if value is invalid, default to empty
|
|
26
|
+
effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
27
27
|
}
|
|
28
28
|
write(file, [, version]) {
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const isNestedPath = path.includes('.');
|
|
29
|
+
const { contents } = file.jsonFile;
|
|
30
|
+
const isNestedPath = this.path.includes('.');
|
|
32
31
|
const nextValue = version === delete_1.DELETE ? undefined : version;
|
|
33
32
|
if (isNestedPath) {
|
|
34
|
-
const fullPath = path.split('.');
|
|
33
|
+
const fullPath = this.path.split('.');
|
|
35
34
|
const pathToParent = fullPath.slice(0, fullPath.length - 1).join('.');
|
|
36
35
|
const key = fullPath.slice(-1).join('');
|
|
37
|
-
return (0,
|
|
36
|
+
return (0, effect_1.pipe)((0, get_1.get)(contents, ...pathToParent.split('.')), effect_1.Effect.flatMap(getOptionOfNonEmptyObject), effect_1.Effect.flatMap((parent) => effect_1.Effect.try(() => {
|
|
38
37
|
parent[key] = nextValue;
|
|
39
|
-
}), (
|
|
38
|
+
})), effect_1.Effect.tapError(() => effect_1.Effect.logDebug(`strategy ${this._tag} with name ${this.name} failed to write to <${file.jsonFile.shortPath}>.${this.path}`)), effect_1.Effect.catchAll(() => effect_1.Effect.succeed(file)), effect_1.Effect.map(() => file));
|
|
40
39
|
}
|
|
41
40
|
else {
|
|
42
|
-
return (0,
|
|
43
|
-
|
|
44
|
-
}), (
|
|
41
|
+
return (0, effect_1.pipe)(getOptionOfNonEmptyObject(contents), effect_1.Effect.flatMap((parent) => effect_1.Effect.try(() => {
|
|
42
|
+
parent[this.path] = nextValue;
|
|
43
|
+
})), effect_1.Effect.tapError(() => effect_1.Effect.logDebug(`strategy ${this._tag} with name ${this.name} failed to write to <${file.jsonFile.shortPath}>.${this.path}`)), effect_1.Effect.catchAll(() => effect_1.Effect.succeed(file)), effect_1.Effect.map(() => file));
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Effect } from 'effect';
|
|
2
2
|
import type { PackageJsonFile } from '../get-package-json-files/package-json-file';
|
|
3
|
-
import type { Delete } from '../
|
|
3
|
+
import type { Delete } from '../version-group/lib/delete';
|
|
4
4
|
export declare class VersionsByNameStrategy {
|
|
5
5
|
_tag: string;
|
|
6
6
|
name: string;
|
|
7
7
|
path: string;
|
|
8
8
|
constructor(name: string, path: string);
|
|
9
|
-
read(file: PackageJsonFile):
|
|
10
|
-
write(file: PackageJsonFile, [name, version]: [string, string | Delete]):
|
|
9
|
+
read(file: PackageJsonFile): Effect.Effect<never, never, [string, string][]>;
|
|
10
|
+
write(file: PackageJsonFile, [name, version]: [string, string | Delete]): Effect.Effect<never, never, PackageJsonFile>;
|
|
11
11
|
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VersionsByNameStrategy = void 0;
|
|
4
|
-
const
|
|
5
|
-
const get_1 = require("tightrope/fn/get");
|
|
4
|
+
const effect_1 = require("effect");
|
|
6
5
|
const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const delete_1 = require("../get-version-groups/lib/delete");
|
|
6
|
+
const get_1 = require("../lib/get");
|
|
7
|
+
const delete_1 = require("../version-group/lib/delete");
|
|
8
|
+
const getOptionOfNonEmptyObject = effect_1.Option.liftPredicate((is_non_empty_object_1.isNonEmptyObject));
|
|
11
9
|
class VersionsByNameStrategy {
|
|
12
10
|
constructor(name, path) {
|
|
13
11
|
this._tag = 'versionsByName';
|
|
@@ -15,15 +13,15 @@ class VersionsByNameStrategy {
|
|
|
15
13
|
this.path = path;
|
|
16
14
|
}
|
|
17
15
|
read(file) {
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
return (0, effect_1.pipe)((0, get_1.get)(file.jsonFile.contents, ...this.path.split('.')), effect_1.Effect.flatMap((value) => getOptionOfNonEmptyObject(value)), effect_1.Effect.map((obj) => Object.entries(obj)), effect_1.Effect.tapError(() => effect_1.Effect.logDebug(`VersionsByNameStrategy#${this.name} found nothing at <${file.jsonFile.shortPath}>.${this.path}`)),
|
|
17
|
+
// if value is invalid, default to empty
|
|
18
|
+
effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
20
19
|
}
|
|
21
20
|
write(file, [name, version]) {
|
|
22
|
-
const path = this.path;
|
|
23
21
|
const nextValue = version === delete_1.DELETE ? undefined : version;
|
|
24
|
-
return (0,
|
|
22
|
+
return (0, effect_1.pipe)((0, get_1.get)(file.jsonFile.contents, ...this.path.split('.')), effect_1.Effect.flatMap(getOptionOfNonEmptyObject), effect_1.Effect.flatMap((parent) => effect_1.Effect.try(() => {
|
|
25
23
|
parent[name] = nextValue;
|
|
26
|
-
}), (
|
|
24
|
+
})), effect_1.Effect.tapError(() => effect_1.Effect.logDebug(`strategy ${this._tag} with name ${this.name} failed to write to <${file.jsonFile.shortPath}>.${this.path}.${name}`)), effect_1.Effect.catchAll(() => effect_1.Effect.succeed(file)), effect_1.Effect.map(() => file));
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
27
|
exports.VersionsByNameStrategy = VersionsByNameStrategy;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Data, Effect } from 'effect';
|
|
2
|
+
import type { VersionGroupConfig } from '../config/types';
|
|
3
|
+
import type { Instance } from '../get-instances/instance';
|
|
4
|
+
import { Report } from '../report';
|
|
5
|
+
declare const BannedVersionGroup_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<A & {
|
|
6
|
+
readonly _tag: "Banned";
|
|
7
|
+
}>;
|
|
8
|
+
export declare class BannedVersionGroup extends BannedVersionGroup_base<{
|
|
9
|
+
config: VersionGroupConfig.Banned;
|
|
10
|
+
instances: Instance[];
|
|
11
|
+
}> {
|
|
12
|
+
groupType: string;
|
|
13
|
+
constructor(config: VersionGroupConfig.Banned);
|
|
14
|
+
canAdd(_: Instance): boolean;
|
|
15
|
+
inspectAll(): Effect.Effect<never, never, Report.Version.Group[]>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BannedVersionGroup = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const report_1 = require("../report");
|
|
6
|
+
const specifier_1 = require("../specifier");
|
|
7
|
+
const delete_1 = require("./lib/delete");
|
|
8
|
+
const group_by_1 = require("./lib/group-by");
|
|
9
|
+
class BannedVersionGroup extends effect_1.Data.TaggedClass('Banned') {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
super({
|
|
12
|
+
config,
|
|
13
|
+
instances: [],
|
|
14
|
+
});
|
|
15
|
+
this.groupType = 'versionGroup';
|
|
16
|
+
}
|
|
17
|
+
canAdd(_) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
inspectAll() {
|
|
21
|
+
return effect_1.Effect.succeed(Object.entries((0, group_by_1.groupBy)('name', this.instances)).map(([name, instances]) => ({
|
|
22
|
+
name,
|
|
23
|
+
reports: instances.map((instance) =>
|
|
24
|
+
// ✘ package should not be used
|
|
25
|
+
// ✓ is a mismatch we can auto-fix
|
|
26
|
+
new report_1.Report.Banned({
|
|
27
|
+
fixable: specifier_1.Specifier.create(instance, delete_1.DELETE),
|
|
28
|
+
})),
|
|
29
|
+
})));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.BannedVersionGroup = BannedVersionGroup;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createVersionGroups = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const is_array_of_strings_1 = require("tightrope/guard/is-array-of-strings");
|
|
6
|
+
const is_non_empty_array_1 = require("tightrope/guard/is-non-empty-array");
|
|
7
|
+
const is_non_empty_string_1 = require("tightrope/guard/is-non-empty-string");
|
|
8
|
+
const is_object_1 = require("tightrope/guard/is-object");
|
|
9
|
+
const _1 = require(".");
|
|
10
|
+
const banned_1 = require("./banned");
|
|
11
|
+
const filtered_out_1 = require("./filtered-out");
|
|
12
|
+
const ignored_1 = require("./ignored");
|
|
13
|
+
const pinned_1 = require("./pinned");
|
|
14
|
+
const same_range_1 = require("./same-range");
|
|
15
|
+
const snapped_to_1 = require("./snapped-to");
|
|
16
|
+
const standard_1 = require("./standard");
|
|
17
|
+
function createVersionGroups(ctx) {
|
|
18
|
+
const { rcFile } = ctx.config;
|
|
19
|
+
const versionGroups = [
|
|
20
|
+
effect_1.Effect.succeed(new filtered_out_1.FilteredOutVersionGroup(ctx)),
|
|
21
|
+
];
|
|
22
|
+
if ((0, is_non_empty_array_1.isNonEmptyArray)(rcFile.versionGroups)) {
|
|
23
|
+
rcFile.versionGroups.forEach((config) => {
|
|
24
|
+
if (!(0, is_object_1.isObject)(config)) {
|
|
25
|
+
return versionGroups.push(effect_1.Effect.fail(new _1.VersionGroup.ConfigError({
|
|
26
|
+
config,
|
|
27
|
+
error: 'config is not an object',
|
|
28
|
+
})));
|
|
29
|
+
}
|
|
30
|
+
const mutuallyExclusiveProps = ['isBanned', 'isIgnored', 'pinVersion', 'snapTo', 'policy'].filter((prop) => Boolean(config[prop]));
|
|
31
|
+
if (mutuallyExclusiveProps.length > 1) {
|
|
32
|
+
return versionGroups.push(effect_1.Effect.fail(new _1.VersionGroup.ConfigError({
|
|
33
|
+
config,
|
|
34
|
+
error: `it's unclear what kind of version group you want, as it contains both ${mutuallyExclusiveProps.join(' and ')}`,
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
const label = (0, is_non_empty_string_1.isNonEmptyString)(config.label) ? config.label : '';
|
|
38
|
+
const dependencyTypes = (0, is_array_of_strings_1.isArrayOfStrings)(config.dependencyTypes)
|
|
39
|
+
? config.dependencyTypes
|
|
40
|
+
: ['**'];
|
|
41
|
+
const dependencies = (0, is_array_of_strings_1.isArrayOfStrings)(config.dependencies) ? config.dependencies : ['**'];
|
|
42
|
+
const packages = (0, is_array_of_strings_1.isArrayOfStrings)(config.packages) ? config.packages : ['**'];
|
|
43
|
+
if (config.isBanned === true) {
|
|
44
|
+
versionGroups.push(effect_1.Effect.succeed(new banned_1.BannedVersionGroup({
|
|
45
|
+
dependencies,
|
|
46
|
+
dependencyTypes,
|
|
47
|
+
isBanned: true,
|
|
48
|
+
label,
|
|
49
|
+
packages,
|
|
50
|
+
})));
|
|
51
|
+
}
|
|
52
|
+
else if (config.isIgnored === true) {
|
|
53
|
+
versionGroups.push(effect_1.Effect.succeed(new ignored_1.IgnoredVersionGroup({
|
|
54
|
+
dependencies,
|
|
55
|
+
dependencyTypes,
|
|
56
|
+
isIgnored: true,
|
|
57
|
+
label,
|
|
58
|
+
packages,
|
|
59
|
+
})));
|
|
60
|
+
}
|
|
61
|
+
else if ((0, is_non_empty_string_1.isNonEmptyString)(config.pinVersion)) {
|
|
62
|
+
versionGroups.push(effect_1.Effect.succeed(new pinned_1.PinnedVersionGroup({
|
|
63
|
+
dependencies,
|
|
64
|
+
dependencyTypes,
|
|
65
|
+
label,
|
|
66
|
+
packages,
|
|
67
|
+
pinVersion: config.pinVersion,
|
|
68
|
+
})));
|
|
69
|
+
}
|
|
70
|
+
else if ((0, is_array_of_strings_1.isArrayOfStrings)(config.snapTo)) {
|
|
71
|
+
versionGroups.push(effect_1.Effect.succeed(new snapped_to_1.SnappedToVersionGroup({
|
|
72
|
+
dependencies,
|
|
73
|
+
dependencyTypes,
|
|
74
|
+
label,
|
|
75
|
+
packages,
|
|
76
|
+
snapTo: config.snapTo,
|
|
77
|
+
})));
|
|
78
|
+
}
|
|
79
|
+
else if (config.policy === 'sameRange') {
|
|
80
|
+
versionGroups.push(effect_1.Effect.succeed(new same_range_1.SameRangeVersionGroup(ctx, {
|
|
81
|
+
dependencies,
|
|
82
|
+
dependencyTypes,
|
|
83
|
+
label,
|
|
84
|
+
packages,
|
|
85
|
+
policy: config.policy,
|
|
86
|
+
})));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
versionGroups.push(effect_1.Effect.succeed(new standard_1.StandardVersionGroup(false, {
|
|
90
|
+
dependencies,
|
|
91
|
+
dependencyTypes,
|
|
92
|
+
label,
|
|
93
|
+
packages,
|
|
94
|
+
preferVersion: config.preferVersion === 'lowestSemver' ? 'lowestSemver' : 'highestSemver',
|
|
95
|
+
})));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
versionGroups.push(effect_1.Effect.succeed(new standard_1.StandardVersionGroup(true, {
|
|
100
|
+
dependencies: ['**'],
|
|
101
|
+
label: 'Default Version Group',
|
|
102
|
+
packages: ['**'],
|
|
103
|
+
preferVersion: 'highestSemver',
|
|
104
|
+
})));
|
|
105
|
+
return effect_1.Effect.all(versionGroups);
|
|
106
|
+
}
|
|
107
|
+
exports.createVersionGroups = createVersionGroups;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Data, Effect } from 'effect';
|
|
2
|
+
import type { GroupConfig } from '../config/types';
|
|
3
|
+
import type { Ctx } from '../get-context';
|
|
4
|
+
import type { Instance } from '../get-instances/instance';
|
|
5
|
+
import { Report } from '../report';
|
|
6
|
+
declare const FilteredOutVersionGroup_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<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<never, never, Report.Version.Group[]>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilteredOutVersionGroup = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const get_filter_1 = require("../config/get-filter");
|
|
6
|
+
const report_1 = require("../report");
|
|
7
|
+
const group_by_1 = require("./lib/group-by");
|
|
8
|
+
class FilteredOutVersionGroup extends effect_1.Data.TaggedClass('FilteredOut') {
|
|
9
|
+
constructor(ctx) {
|
|
10
|
+
super({
|
|
11
|
+
config: {
|
|
12
|
+
dependencies: ['**'],
|
|
13
|
+
dependencyTypes: ['**'],
|
|
14
|
+
label: 'Filtered out',
|
|
15
|
+
packages: ['**'],
|
|
16
|
+
},
|
|
17
|
+
filter: (0, get_filter_1.getFilter)(ctx.config),
|
|
18
|
+
instances: [],
|
|
19
|
+
});
|
|
20
|
+
this.groupType = 'versionGroup';
|
|
21
|
+
}
|
|
22
|
+
canAdd(instance) {
|
|
23
|
+
return instance.name.search(new RegExp(this.filter)) === -1;
|
|
24
|
+
}
|
|
25
|
+
inspectAll() {
|
|
26
|
+
return effect_1.Effect.succeed(Object.entries((0, group_by_1.groupBy)('name', this.instances)).map(([name, instances]) => ({
|
|
27
|
+
name,
|
|
28
|
+
reports: instances.map((instance) =>
|
|
29
|
+
// ✓ is ignored and dismissed as valid
|
|
30
|
+
new report_1.Report.FilteredOut({ instance })),
|
|
31
|
+
})));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.FilteredOutVersionGroup = FilteredOutVersionGroup;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Data, Effect } from 'effect';
|
|
2
|
+
import type { VersionGroupConfig } from '../config/types';
|
|
3
|
+
import type { Instance } from '../get-instances/instance';
|
|
4
|
+
import { Report } from '../report';
|
|
5
|
+
declare const IgnoredVersionGroup_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<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<never, never, Report.Version.Group[]>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IgnoredVersionGroup = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const report_1 = require("../report");
|
|
6
|
+
const group_by_1 = require("./lib/group-by");
|
|
7
|
+
class IgnoredVersionGroup extends effect_1.Data.TaggedClass('Ignored') {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
super({
|
|
10
|
+
config,
|
|
11
|
+
instances: [],
|
|
12
|
+
});
|
|
13
|
+
this.groupType = 'versionGroup';
|
|
14
|
+
}
|
|
15
|
+
canAdd(_) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
inspectAll() {
|
|
19
|
+
return effect_1.Effect.succeed(Object.entries((0, group_by_1.groupBy)('name', this.instances)).map(([name, instances]) => ({
|
|
20
|
+
name,
|
|
21
|
+
reports: instances.map((instance) =>
|
|
22
|
+
// ✓ is ignored and dismissed as valid
|
|
23
|
+
new report_1.Report.Ignored({ instance })),
|
|
24
|
+
})));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.IgnoredVersionGroup = IgnoredVersionGroup;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Data } from 'effect';
|
|
2
|
+
import type { Union } from 'ts-toolbelt';
|
|
3
|
+
import type { BannedVersionGroup } from './banned';
|
|
4
|
+
import type { FilteredOutVersionGroup } from './filtered-out';
|
|
5
|
+
import type { IgnoredVersionGroup } from './ignored';
|
|
6
|
+
import type { PinnedVersionGroup } from './pinned';
|
|
7
|
+
import type { SameRangeVersionGroup } from './same-range';
|
|
8
|
+
import type { SnappedToVersionGroup } from './snapped-to';
|
|
9
|
+
import type { StandardVersionGroup } from './standard';
|
|
10
|
+
export declare namespace VersionGroup {
|
|
11
|
+
export type Banned = BannedVersionGroup;
|
|
12
|
+
export type FilteredOut = FilteredOutVersionGroup;
|
|
13
|
+
export type Ignored = IgnoredVersionGroup;
|
|
14
|
+
export type Pinned = PinnedVersionGroup;
|
|
15
|
+
export type SameRange = SameRangeVersionGroup;
|
|
16
|
+
export type SnappedTo = SnappedToVersionGroup;
|
|
17
|
+
export type Standard = StandardVersionGroup;
|
|
18
|
+
export type Any = Union.Strict<Banned | FilteredOut | Ignored | Pinned | SameRange | SnappedTo | Standard>;
|
|
19
|
+
const ConfigError_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<A & {
|
|
20
|
+
readonly _tag: "VersionGroupConfigError";
|
|
21
|
+
}>;
|
|
22
|
+
export class ConfigError extends ConfigError_base<{
|
|
23
|
+
readonly config: unknown;
|
|
24
|
+
readonly error: string;
|
|
25
|
+
}> {
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VersionGroup = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
var VersionGroup;
|
|
6
|
+
(function (VersionGroup) {
|
|
7
|
+
class ConfigError extends effect_1.Data.TaggedClass('VersionGroupConfigError') {
|
|
8
|
+
}
|
|
9
|
+
VersionGroup.ConfigError = ConfigError;
|
|
10
|
+
})(VersionGroup || (exports.VersionGroup = VersionGroup = {}));
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Specifier } from '../../specifier';
|
|
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<never, import("../../specifier/lib/non-semver-error").NonSemverError, Specifier.Any>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getHighestVersion = void 0;
|
|
4
|
+
const get_preferred_version_1 = require("./get-preferred-version");
|
|
5
|
+
/**
|
|
6
|
+
* From an array of instances where every instance contains a valid semver
|
|
7
|
+
* version, return the highest version number
|
|
8
|
+
*/
|
|
9
|
+
function getHighestVersion(specifiers) {
|
|
10
|
+
return (0, get_preferred_version_1.getPreferredVersion)('highestSemver', specifiers);
|
|
11
|
+
}
|
|
12
|
+
exports.getHighestVersion = getHighestVersion;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Specifier } from '../../specifier';
|
|
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<never, import("../../specifier/lib/non-semver-error").NonSemverError, Specifier.Any>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLowestVersion = void 0;
|
|
4
|
+
const get_preferred_version_1 = require("./get-preferred-version");
|
|
5
|
+
/**
|
|
6
|
+
* From an array of instances where every instance contains a valid semver
|
|
7
|
+
* version, return the lowest version number
|
|
8
|
+
*/
|
|
9
|
+
function getLowestVersion(specifiers) {
|
|
10
|
+
return (0, get_preferred_version_1.getPreferredVersion)('lowestSemver', specifiers);
|
|
11
|
+
}
|
|
12
|
+
exports.getLowestVersion = getLowestVersion;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from 'effect';
|
|
2
|
+
import type { VersionGroupConfig } from '../../config/types';
|
|
3
|
+
import type { Specifier } from '../../specifier';
|
|
4
|
+
import type { NonSemverError } from '../../specifier/lib/non-semver-error';
|
|
5
|
+
export declare function getPreferredVersion(preferVersion: VersionGroupConfig.Standard['preferVersion'], specifiers: Specifier.Any[]): Effect.Effect<never, NonSemverError, Specifier.Any>;
|
package/dist/{get-version-groups/lib/compare-semver.js → version-group/lib/get-preferred-version.js}
RENAMED
|
@@ -3,11 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getPreferredVersion = void 0;
|
|
7
|
+
const effect_1 = require("effect");
|
|
7
8
|
const gt_1 = __importDefault(require("semver/functions/gt"));
|
|
8
9
|
const lt_1 = __importDefault(require("semver/functions/lt"));
|
|
9
10
|
const clean_1 = require("./clean");
|
|
10
11
|
const get_range_score_1 = require("./get-range-score");
|
|
12
|
+
function getPreferredVersion(preferVersion, specifiers) {
|
|
13
|
+
return (0, effect_1.pipe)(
|
|
14
|
+
// every instance must have a semver version
|
|
15
|
+
effect_1.Effect.all(specifiers.map((specifier) => (0, effect_1.pipe)(specifier.getSemver(), effect_1.Effect.map((semver) => ({ semver, specifier }))))),
|
|
16
|
+
// comparing semver can error on some loose ranges, all must succeed
|
|
17
|
+
effect_1.Effect.map((semvers) => semvers.sort((a, b) => compareSemver(a.semver, b.semver))),
|
|
18
|
+
// get the preferred value from the list
|
|
19
|
+
effect_1.Effect.map((sorted) => sorted[preferVersion === 'lowestSemver' ? 0 : sorted.length - 1]),
|
|
20
|
+
// return just the specifier
|
|
21
|
+
effect_1.Effect.map((preferred) => preferred?.specifier));
|
|
22
|
+
}
|
|
23
|
+
exports.getPreferredVersion = getPreferredVersion;
|
|
11
24
|
const EQ = 0;
|
|
12
25
|
const LT = -1;
|
|
13
26
|
const GT = 1;
|
|
@@ -36,4 +49,3 @@ function compareSemver(a, b) {
|
|
|
36
49
|
return GT;
|
|
37
50
|
return EQ;
|
|
38
51
|
}
|
|
39
|
-
exports.compareSemver = compareSemver;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.groupBy = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Convert an array of objects to an object, where each property of the new
|
|
6
|
+
* object is an array whose members share the same value for the given key.
|
|
7
|
+
*/
|
|
4
8
|
function groupBy(key, array) {
|
|
5
9
|
return array.reduce((objectsByKeyValue, obj) => {
|
|
6
10
|
const value = obj[key];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Data, Effect } from 'effect';
|
|
2
|
+
import type { VersionGroupConfig } from '../config/types';
|
|
3
|
+
import type { Instance } from '../get-instances/instance';
|
|
4
|
+
import { Report } from '../report';
|
|
5
|
+
declare const PinnedVersionGroup_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<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<never, never, Report.Version.Group[]>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PinnedVersionGroup = void 0;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const report_1 = require("../report");
|
|
6
|
+
const specifier_1 = require("../specifier");
|
|
7
|
+
const group_by_1 = require("./lib/group-by");
|
|
8
|
+
class PinnedVersionGroup extends effect_1.Data.TaggedClass('Pinned') {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
super({
|
|
11
|
+
config,
|
|
12
|
+
instances: [],
|
|
13
|
+
});
|
|
14
|
+
this.groupType = 'versionGroup';
|
|
15
|
+
}
|
|
16
|
+
canAdd(_) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
inspectAll() {
|
|
20
|
+
return effect_1.Effect.all(Object.entries((0, group_by_1.groupBy)('name', this.instances)).map(([name, instances]) => (0, effect_1.pipe)(instances, effect_1.Effect.forEach((instance) => (0, effect_1.pipe)(effect_1.Effect.succeed(specifier_1.Specifier.create(instance, this.config.pinVersion)), effect_1.Effect.map((expected) => instance.rawSpecifier === expected.raw
|
|
21
|
+
? // ✓ pinned takes precedence over any semver group
|
|
22
|
+
// ✓ current version matches expected
|
|
23
|
+
new report_1.Report.Valid({ specifier: expected })
|
|
24
|
+
: // ✓ pinned takes precedence over any semver group
|
|
25
|
+
// ✘ current version mismatches expected
|
|
26
|
+
// ✓ is a mismatch we can auto-fix
|
|
27
|
+
new report_1.Report.PinnedMismatch({ fixable: expected })))), effect_1.Effect.map((reports) => ({ name, reports })))));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.PinnedVersionGroup = PinnedVersionGroup;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Data, Effect } from 'effect';
|
|
2
|
+
import type { VersionGroupConfig } from '../config/types';
|
|
3
|
+
import type { Ctx } from '../get-context';
|
|
4
|
+
import type { Instance } from '../get-instances/instance';
|
|
5
|
+
import { Report } from '../report';
|
|
6
|
+
declare const SameRangeVersionGroup_base: new <A extends Record<string, any>>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("effect/dist/declarations/src/Equal").Equal>) => Data.Data<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<never, never, Report.Version.Group[]>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|