syncpack 10.7.3 → 11.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/bin-fix-mismatches/effects.js +9 -9
  2. package/dist/bin-fix-mismatches/fix-mismatches.js +2 -2
  3. package/dist/bin-format/format-cli.js +2 -2
  4. package/dist/bin-format/format.js +4 -3
  5. package/dist/bin-lint/lint.js +2 -2
  6. package/dist/bin-lint-semver-ranges/effects.js +10 -10
  7. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +2 -2
  8. package/dist/bin-list/effects.js +16 -14
  9. package/dist/bin-list/list.js +2 -2
  10. package/dist/bin-list-mismatches/effects.js +22 -22
  11. package/dist/bin-list-mismatches/list-mismatches.js +2 -2
  12. package/dist/bin-prompt/effects.js +15 -15
  13. package/dist/bin-prompt/prompt.js +2 -2
  14. package/dist/bin-set-semver-ranges/effects.js +10 -10
  15. package/dist/bin-set-semver-ranges/set-semver-ranges.js +2 -2
  16. package/dist/bin-update/effects.js +36 -30
  17. package/dist/bin-update/update.js +2 -2
  18. package/dist/config/get-enabled-types.d.ts +6 -1
  19. package/dist/config/get-enabled-types.js +62 -34
  20. package/dist/config/tag.d.ts +3 -0
  21. package/dist/config/tag.js +28 -0
  22. package/dist/config/types.d.ts +0 -2
  23. package/dist/config/types.js +0 -26
  24. package/dist/constants.d.ts +3 -4
  25. package/dist/constants.js +12 -13
  26. package/dist/create-program/effects.d.ts +4 -4
  27. package/dist/create-program/semver-ranges.d.ts +2 -2
  28. package/dist/create-program/semver-ranges.js +6 -6
  29. package/dist/create-program/versions.d.ts +2 -2
  30. package/dist/create-program/versions.js +6 -6
  31. package/dist/env/create-env.js +28 -7
  32. package/dist/env/default-env.js +14 -9
  33. package/dist/env/exit-if-invalid.js +1 -1
  34. package/dist/env/write-if-changed.js +1 -1
  35. package/dist/error-handlers/create-error-handlers.d.ts +2 -1
  36. package/dist/error-handlers/create-error-handlers.js +3 -0
  37. package/dist/error-handlers/default-error-handlers.js +5 -0
  38. package/dist/get-context/index.js +2 -2
  39. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +1 -1
  40. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +1 -1
  41. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +9 -6
  42. package/dist/get-package-json-files/get-patterns/index.js +1 -1
  43. package/dist/get-package-json-files/get-patterns/read-json-safe.js +5 -2
  44. package/dist/get-package-json-files/package-json-file.d.ts +4 -2
  45. package/dist/get-package-json-files/package-json-file.js +5 -4
  46. package/dist/get-semver-groups/filtered-out.d.ts +3 -3
  47. package/dist/get-semver-groups/filtered-out.js +1 -1
  48. package/dist/get-semver-groups/ignored.d.ts +3 -3
  49. package/dist/get-semver-groups/index.d.ts +18 -18
  50. package/dist/get-semver-groups/index.js +5 -5
  51. package/dist/get-semver-groups/with-range.d.ts +4 -4
  52. package/dist/get-semver-groups/with-range.js +9 -9
  53. package/dist/get-version-groups/banned.d.ts +3 -3
  54. package/dist/get-version-groups/filtered-out.d.ts +3 -3
  55. package/dist/get-version-groups/filtered-out.js +1 -1
  56. package/dist/get-version-groups/ignored.d.ts +3 -3
  57. package/dist/get-version-groups/index.d.ts +72 -24
  58. package/dist/get-version-groups/index.js +54 -6
  59. package/dist/get-version-groups/lib/{sort.js → compare-semver.js} +0 -5
  60. package/dist/get-version-groups/lib/get-highest-version.js +2 -2
  61. package/dist/get-version-groups/lib/get-lowest-version.js +2 -2
  62. package/dist/get-version-groups/lib/get-unique-specifiers.d.ts +2 -0
  63. package/dist/get-version-groups/lib/get-unique-specifiers.js +11 -0
  64. package/dist/get-version-groups/pinned.d.ts +3 -3
  65. package/dist/get-version-groups/pinned.js +1 -1
  66. package/dist/get-version-groups/same-range.d.ts +3 -3
  67. package/dist/get-version-groups/same-range.js +1 -1
  68. package/dist/get-version-groups/snapped-to.d.ts +3 -3
  69. package/dist/get-version-groups/snapped-to.js +4 -3
  70. package/dist/get-version-groups/standard.d.ts +4 -4
  71. package/dist/get-version-groups/standard.js +19 -18
  72. package/dist/guards/can-add-to-group.d.ts +2 -2
  73. package/dist/guards/can-add-to-group.js +35 -5
  74. package/dist/guards/is-loose-semver.d.ts +1 -0
  75. package/dist/guards/is-loose-semver.js +1 -0
  76. package/dist/guards/is-semver.d.ts +1 -0
  77. package/dist/guards/is-semver.js +1 -0
  78. package/dist/guards/is-valid-semver-range.d.ts +1 -0
  79. package/dist/guards/is-valid-semver-range.js +1 -0
  80. package/dist/instance/create.d.ts +4 -0
  81. package/dist/instance/create.js +142 -0
  82. package/dist/instance/index.d.ts +122 -0
  83. package/dist/instance/index.js +154 -0
  84. package/dist/schema.json +361 -0
  85. package/package.json +24 -20
  86. package/dist/get-package-json-files/instance.d.ts +0 -21
  87. package/dist/get-package-json-files/instance.js +0 -23
  88. package/dist/get-version-groups/lib/get-unique-versions.d.ts +0 -2
  89. package/dist/get-version-groups/lib/get-unique-versions.js +0 -8
  90. package/dist/guards/is-supported.d.ts +0 -1
  91. package/dist/guards/is-supported.js +0 -17
  92. /package/dist/get-version-groups/lib/{sort.d.ts → compare-semver.d.ts} +0 -0
@@ -25,14 +25,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.defaultEnv = void 0;
27
27
  const cosmiconfig_1 = require("cosmiconfig");
28
+ const pipe_1 = require("tightrope/fn/pipe");
29
+ const from_try_1 = require("tightrope/result/from-try");
30
+ const unwrap_or_else_1 = require("tightrope/result/unwrap-or-else");
28
31
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
29
32
  // @ts-ignore Select *does* exist
30
33
  const enquirer_1 = require("enquirer");
31
- const fs_extra_1 = require("fs-extra");
34
+ const fs_1 = require("fs");
32
35
  const globby = __importStar(require("globby"));
33
36
  const path_1 = require("path");
34
37
  const readYamlFile = __importStar(require("read-yaml-file"));
35
38
  const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
39
+ const result_1 = require("tightrope/result");
40
+ const filter_1 = require("tightrope/result/filter");
41
+ const map_1 = require("tightrope/result/map");
42
+ const map_err_1 = require("tightrope/result/map-err");
36
43
  const constants_1 = require("../constants");
37
44
  const log_verbose_1 = require("../lib/log-verbose");
38
45
  exports.defaultEnv = {
@@ -64,12 +71,10 @@ exports.defaultEnv = {
64
71
  const result = configPath ? client.load(configPath) : client.search();
65
72
  if (!(0, is_non_empty_object_1.isNonEmptyObject)(result)) {
66
73
  const rcPath = (0, path_1.join)(constants_1.CWD, 'package.json');
67
- const pjson = (0, fs_extra_1.readJsonSync)(rcPath, { throws: false });
68
- const rcConfig = pjson?.config?.syncpack;
69
- if ((0, is_non_empty_object_1.isNonEmptyObject)(rcConfig))
70
- return rcConfig;
71
- (0, log_verbose_1.logVerbose)('no config file found');
72
- return {};
74
+ return (0, pipe_1.pipe)((0, from_try_1.fromTry)(() => (0, fs_1.readFileSync)(rcPath, { encoding: 'utf8' })), (0, map_1.map)(JSON.parse), (0, map_1.map)((pjson) => { var _a; return (_a = pjson === null || pjson === void 0 ? void 0 : pjson.config) === null || _a === void 0 ? void 0 : _a.syncpack; }), (0, filter_1.filter)(is_non_empty_object_1.isNonEmptyObject, 'no config file found'), (0, map_err_1.mapErr)((err) => {
75
+ (0, log_verbose_1.logVerbose)('no config file found');
76
+ return err;
77
+ }), (0, unwrap_or_else_1.unwrapOrElse)(() => new result_1.Ok({})));
73
78
  }
74
79
  const rcPath = result.filepath;
75
80
  const rcConfig = result.config;
@@ -80,7 +85,7 @@ exports.defaultEnv = {
80
85
  /* istanbul ignore next */
81
86
  readFileSync(filePath) {
82
87
  (0, log_verbose_1.logVerbose)('readFileSync(', filePath, ')');
83
- return (0, fs_extra_1.readFileSync)(filePath, { encoding: 'utf8' });
88
+ return (0, fs_1.readFileSync)(filePath, { encoding: 'utf8' });
84
89
  },
85
90
  /* istanbul ignore next */
86
91
  readYamlFileSync(filePath) {
@@ -90,6 +95,6 @@ exports.defaultEnv = {
90
95
  /* istanbul ignore next */
91
96
  writeFileSync(filePath, contents) {
92
97
  (0, log_verbose_1.logVerbose)('writeFileSync(', filePath, contents, ')');
93
- (0, fs_extra_1.writeFileSync)(filePath, contents);
98
+ (0, fs_1.writeFileSync)(filePath, contents);
94
99
  },
95
100
  };
@@ -29,6 +29,6 @@ const Effect = __importStar(require("@effect/io/Effect"));
29
29
  const tags_1 = require("./tags");
30
30
  // @TODO what's the effect-ts way to process.exit?
31
31
  function exitIfInvalid(ctx) {
32
- return (0, Function_1.pipe)(tags_1.EnvTag, Effect.flatMap((env) => (ctx.isInvalid ? env.exitProcess(1) : Effect.unit())), Effect.map(() => ctx));
32
+ return (0, Function_1.pipe)(tags_1.EnvTag, Effect.flatMap((env) => (ctx.isInvalid ? env.exitProcess(1) : Effect.unit)), Effect.map(() => ctx));
33
33
  }
34
34
  exports.exitIfInvalid = exitIfInvalid;
@@ -35,7 +35,7 @@ const get_indent_1 = require("../config/get-indent");
35
35
  const constants_1 = require("../constants");
36
36
  const tags_1 = require("./tags");
37
37
  function writeIfChanged(ctx) {
38
- return (0, Function_1.pipe)(tags_1.EnvTag, Effect.flatMap((env) => Effect.all(ctx.packageJsonFiles.map((file) => (0, Function_1.pipe)(Effect.Do(), Effect.bind('nextJson', () => toJson(file)), Effect.bind('hasChanged', ({ nextJson }) => Effect.succeed(file.json !== nextJson)), Effect.flatMap(({ hasChanged, nextJson }) => hasChanged
38
+ return (0, Function_1.pipe)(tags_1.EnvTag, Effect.flatMap((env) => Effect.all(ctx.packageJsonFiles.map((file) => (0, Function_1.pipe)(Effect.Do, Effect.bind('nextJson', () => toJson(file)), Effect.bind('hasChanged', ({ nextJson }) => Effect.succeed(file.json !== nextJson)), Effect.flatMap(({ hasChanged, nextJson }) => hasChanged
39
39
  ? (0, Function_1.pipe)(env.writeFileSync(file.filePath, nextJson), Effect.flatMap(() => Effect.sync(() => {
40
40
  console.log((0, chalk_1.default) `{green ${constants_1.ICON.tick}}`, file.shortPath);
41
41
  })))
@@ -1,5 +1,5 @@
1
1
  import * as Effect from '@effect/io/Effect';
2
- import type { DeprecatedTypesError } from '../config/get-enabled-types';
2
+ import type { DeprecatedTypesError, RenamedWorkspaceTypeError } from '../config/get-enabled-types';
3
3
  import type { GlobError, ReadConfigFileError, ReadFileError, WriteFileError } from '../env/tags';
4
4
  import type { NoSourcesFoundError } from '../get-package-json-files/get-file-paths';
5
5
  import type { JsonParseError } from '../get-package-json-files/get-patterns/read-json-safe';
@@ -12,6 +12,7 @@ export interface ErrorHandlers<R = Effect.Effect<never, never, void>> {
12
12
  NoSourcesFoundError(err: NoSourcesFoundError): R;
13
13
  ReadConfigFileError(err: ReadConfigFileError): R;
14
14
  ReadFileError(err: ReadFileError): R;
15
+ RenamedWorkspaceTypeError(err: RenamedWorkspaceTypeError): R;
15
16
  SemverGroupConfigError(err: SemverGroupConfigError): R;
16
17
  VersionGroupConfigError(err: VersionGroupConfigError): R;
17
18
  WriteFileError(err: WriteFileError): R;
@@ -44,6 +44,9 @@ const createErrorHandlers = (errorHandlers) => ({
44
44
  ReadFileError(err) {
45
45
  return Effect.sync(() => errorHandlers.ReadFileError(err));
46
46
  },
47
+ RenamedWorkspaceTypeError(err) {
48
+ return Effect.sync(() => errorHandlers.RenamedWorkspaceTypeError(err));
49
+ },
47
50
  SemverGroupConfigError(err) {
48
51
  return Effect.sync(() => errorHandlers.SemverGroupConfigError(err));
49
52
  },
@@ -37,6 +37,11 @@ exports.defaultErrorHandlers = {
37
37
  console.log(chalk_1.default.red(' File:', err.filePath));
38
38
  console.log(chalk_1.default.red(' Error:', err.error));
39
39
  },
40
+ RenamedWorkspaceTypeError() {
41
+ const url = 'https://github.com/JamieMason/syncpack/releases/tag/11.2.1';
42
+ console.log(chalk_1.default.red(constants_1.ICON.panic, `The "workspace" dependency type was renamed to "local" in ${url}`));
43
+ console.log(chalk_1.default.red(' Docs: https://jamiemason.github.io/syncpack/config/dependency-types'));
44
+ },
40
45
  SemverGroupConfigError(err) {
41
46
  console.log(chalk_1.default.red(constants_1.ICON.panic, 'Your semver group config contains an error'));
42
47
  console.log(chalk_1.default.red(' Error:', err.error));
@@ -26,11 +26,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.getContext = void 0;
27
27
  const Function_1 = require("@effect/data/Function");
28
28
  const Effect = __importStar(require("@effect/io/Effect"));
29
- const types_1 = require("../config/types");
29
+ const tag_1 = require("../config/tag");
30
30
  const tags_1 = require("../env/tags");
31
31
  const get_package_json_files_1 = require("../get-package-json-files");
32
32
  function getContext() {
33
- return (0, Function_1.pipe)(Effect.Do(), Effect.bind('cli', () => types_1.CliConfigTag), Effect.bind('env', () => tags_1.EnvTag), Effect.bind('rcFile', ({ cli, env }) => env.readConfigFileSync(cli.configPath)), Effect.bind('packageJsonFiles', get_package_json_files_1.getPackageJsonFiles), Effect.map(({ cli, rcFile, packageJsonFiles }) => ({
33
+ return (0, Function_1.pipe)(Effect.Do, Effect.bind('cli', () => tag_1.CliConfigTag), Effect.bind('env', () => tags_1.EnvTag), Effect.bind('rcFile', ({ cli, env }) => env.readConfigFileSync(cli.configPath)), Effect.bind('packageJsonFiles', get_package_json_files_1.getPackageJsonFiles), Effect.map(({ cli, rcFile, packageJsonFiles }) => ({
34
34
  config: { cli, rcFile },
35
35
  isInvalid: false,
36
36
  packageJsonFiles,
@@ -32,7 +32,7 @@ const is_array_of_strings_1 = require("tightrope/guard/is-array-of-strings");
32
32
  const constants_1 = require("../../constants");
33
33
  const read_json_safe_1 = require("./read-json-safe");
34
34
  function getLernaPatterns() {
35
- return (0, Function_1.pipe)((0, read_json_safe_1.readJsonSafe)((0, path_1.join)(constants_1.CWD, 'lerna.json')), Effect.map((file) => (0, is_array_of_strings_1.isArrayOfStrings)(file?.contents?.packages) ? O.some(file.contents.packages) : O.none()), Effect.catchTags({
35
+ return (0, Function_1.pipe)((0, read_json_safe_1.readJsonSafe)((0, path_1.join)(constants_1.CWD, 'lerna.json')), Effect.map((file) => { var _a; return (0, is_array_of_strings_1.isArrayOfStrings)((_a = file === null || file === void 0 ? void 0 : file.contents) === null || _a === void 0 ? void 0 : _a.packages) ? O.some(file.contents.packages) : O.none(); }), Effect.catchTags({
36
36
  ReadFileError: () => Effect.succeed(O.none()),
37
37
  JsonParseError: () => Effect.succeed(O.none()),
38
38
  }));
@@ -37,7 +37,7 @@ function getPnpmPatterns() {
37
37
  // - "packages/**"
38
38
  // - "components/**"
39
39
  // - "!**/test/**"
40
- tags_1.EnvTag, Effect.flatMap((env) => env.readYamlFileSync((0, path_1.join)(constants_1.CWD, 'pnpm-workspace.yaml'))), Effect.map((file) => ((0, is_array_of_strings_1.isArrayOfStrings)(file?.packages) ? O.some(file.packages) : O.none())), Effect.catchTags({
40
+ tags_1.EnvTag, Effect.flatMap((env) => env.readYamlFileSync((0, path_1.join)(constants_1.CWD, 'pnpm-workspace.yaml'))), Effect.map((file) => ((0, is_array_of_strings_1.isArrayOfStrings)(file === null || file === void 0 ? void 0 : file.packages) ? O.some(file.packages) : O.none())), Effect.catchTags({
41
41
  ReadYamlFileError: () => Effect.succeed(O.none()),
42
42
  }));
43
43
  }
@@ -33,12 +33,15 @@ const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
33
33
  const constants_1 = require("../../constants");
34
34
  const read_json_safe_1 = require("./read-json-safe");
35
35
  function getYarnPatterns() {
36
- return (0, Function_1.pipe)((0, read_json_safe_1.readJsonSafe)((0, path_1.join)(constants_1.CWD, 'package.json')), Effect.map((file) => (0, is_non_empty_object_1.isNonEmptyObject)(file?.contents?.workspaces) &&
37
- (0, is_array_of_strings_1.isArrayOfStrings)(file.contents.workspaces?.packages)
38
- ? O.some(file.contents.workspaces.packages)
39
- : (0, is_array_of_strings_1.isArrayOfStrings)(file?.contents?.workspaces)
40
- ? O.some(file.contents.workspaces)
41
- : O.none()), Effect.catchTags({
36
+ return (0, Function_1.pipe)((0, read_json_safe_1.readJsonSafe)((0, path_1.join)(constants_1.CWD, 'package.json')), Effect.map((file) => {
37
+ var _a, _b, _c;
38
+ return (0, is_non_empty_object_1.isNonEmptyObject)((_a = file === null || file === void 0 ? void 0 : file.contents) === null || _a === void 0 ? void 0 : _a.workspaces) &&
39
+ (0, is_array_of_strings_1.isArrayOfStrings)((_b = file.contents.workspaces) === null || _b === void 0 ? void 0 : _b.packages)
40
+ ? O.some(file.contents.workspaces.packages)
41
+ : (0, is_array_of_strings_1.isArrayOfStrings)((_c = file === null || file === void 0 ? void 0 : file.contents) === null || _c === void 0 ? void 0 : _c.workspaces)
42
+ ? O.some(file.contents.workspaces)
43
+ : O.none();
44
+ }), Effect.catchTags({
42
45
  ReadFileError: () => Effect.succeed(O.none()),
43
46
  JsonParseError: () => Effect.succeed(O.none()),
44
47
  }));
@@ -40,7 +40,7 @@ const get_yarn_patterns_1 = require("./get-yarn-patterns");
40
40
  * @returns `['./package.json', './packages/* /package.json']`
41
41
  */
42
42
  function getPatterns(config) {
43
- return (0, Function_1.pipe)(getCliPatterns(), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_yarn_patterns_1.getYarnPatterns)())), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_pnpm_patterns_1.getPnpmPatterns)())), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_lerna_patterns_1.getLernaPatterns)())), Effect.map((option) => (0, Function_1.pipe)(option, O.map(addRootDir), O.map(limitToPackageJson), O.getOrElse(() => constants_1.DEFAULT_SOURCES))));
43
+ return (0, Function_1.pipe)(getCliPatterns(), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_yarn_patterns_1.getYarnPatterns)())), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_pnpm_patterns_1.getPnpmPatterns)())), Effect.flatMap((option) => (O.isSome(option) ? Effect.succeed(option) : (0, get_lerna_patterns_1.getLernaPatterns)())), Effect.map((option) => (0, Function_1.pipe)(option, O.map(addRootDir), O.map(limitToPackageJson), O.getOrElse(() => [...constants_1.DEFAULT_CONFIG.source]))));
44
44
  function getCliPatterns() {
45
45
  return (0, Function_1.pipe)(O.some((0, get_source_1.getSource)(config)), O.filter(is_array_of_strings_1.isArrayOfStrings), Effect.succeed);
46
46
  }
@@ -33,8 +33,11 @@ class JsonParseError extends Data.TaggedClass('JsonParseError') {
33
33
  exports.JsonParseError = JsonParseError;
34
34
  // @TODO: move to env.readJsonFileSync
35
35
  function readJsonSafe(filePath) {
36
- return (0, Function_1.pipe)(Effect.Do(), Effect.bind('env', () => tags_1.EnvTag), Effect.bind('json', ({ env }) => env.readFileSync(filePath)), Effect.bind('contents', ({ json }) =>
36
+ return (0, Function_1.pipe)(Effect.Do, Effect.bind('env', () => tags_1.EnvTag), Effect.bind('json', ({ env }) => env.readFileSync(filePath)), Effect.bind('contents', ({ json }) =>
37
37
  // @TODO: move to env.parseJson
38
- Effect.tryCatch(() => JSON.parse(json), (err) => new JsonParseError({ error: String(err), filePath, json }))), Effect.map(({ contents, json }) => ({ contents, filePath, json })));
38
+ Effect.try({
39
+ try: () => JSON.parse(json),
40
+ catch: (err) => new JsonParseError({ error: String(err), filePath, json }),
41
+ })), Effect.map(({ contents, json }) => ({ contents, filePath, json })));
39
42
  }
40
43
  exports.readJsonSafe = readJsonSafe;
@@ -1,7 +1,7 @@
1
1
  import type { Strategy } from '../config/get-custom-types';
2
2
  import type { Ctx } from '../get-context';
3
+ import type { Instance } from '../instance';
3
4
  import type { JsonFile } from './get-patterns/read-json-safe';
4
- import { Instance } from './instance';
5
5
  export interface PackageJson {
6
6
  bugs?: {
7
7
  url: string;
@@ -34,6 +34,8 @@ export declare class PackageJsonFile {
34
34
  contents: PackageJson;
35
35
  /** absolute path on disk to this file */
36
36
  readonly filePath: string;
37
+ /** absolute path on disk to this file's directory */
38
+ readonly dirPath: string;
37
39
  /** raw file contents of the file */
38
40
  readonly json: string;
39
41
  /** resolved configuration */
@@ -41,5 +43,5 @@ export declare class PackageJsonFile {
41
43
  /** relative path on disk to this file */
42
44
  readonly shortPath: string;
43
45
  constructor(jsonFile: JsonFile<PackageJson>, config: Ctx['config']);
44
- getInstances(enabledTypes: Strategy.Any[]): Instance[];
46
+ getInstances(enabledTypes: Strategy.Any[]): Instance.Any[];
45
47
  }
@@ -5,22 +5,23 @@ const Function_1 = require("@effect/data/Function");
5
5
  const path_1 = require("path");
6
6
  const map_1 = require("tightrope/result/map");
7
7
  const constants_1 = require("../constants");
8
+ const create_1 = require("../instance/create");
8
9
  const log_verbose_1 = require("../lib/log-verbose");
9
- const instance_1 = require("./instance");
10
10
  class PackageJsonFile {
11
11
  constructor(jsonFile, config) {
12
12
  this.config = config;
13
13
  this.contents = jsonFile.contents;
14
14
  this.filePath = jsonFile.filePath;
15
+ this.dirPath = (0, path_1.dirname)(jsonFile.filePath);
15
16
  this.json = jsonFile.json;
16
17
  this.shortPath = (0, path_1.relative)(constants_1.CWD, jsonFile.filePath);
17
18
  }
18
19
  getInstances(enabledTypes) {
19
20
  const instances = [];
20
21
  enabledTypes.forEach((strategy) => {
21
- (0, Function_1.pipe)(strategy.read(this), (0, map_1.map)((entries) => entries.forEach(([name, version]) => {
22
- (0, log_verbose_1.logVerbose)(`add ${name}@${version} to ${strategy.name}:${strategy._tag} ${this.shortPath}`);
23
- instances.push(new instance_1.Instance(strategy, name, this, version));
22
+ (0, Function_1.pipe)(strategy.read(this), (0, map_1.map)((entries) => entries.forEach(([name, specifier]) => {
23
+ (0, log_verbose_1.logVerbose)(`add ${name}@${specifier} to ${strategy.name}:${strategy._tag} ${this.shortPath}`);
24
+ instances.push((0, create_1.createInstance)(strategy, name, this, specifier));
24
25
  })));
25
26
  });
26
27
  return instances;
@@ -3,17 +3,17 @@ import * as Effect from '@effect/io/Effect';
3
3
  import { SemverGroupReport } from '.';
4
4
  import type { GroupConfig } from '../config/types';
5
5
  import type { Ctx } from '../get-context';
6
- import type { Instance } from '../get-package-json-files/instance';
6
+ import type { Instance } from '../instance';
7
7
  declare const FilteredOutSemverGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
8
8
  _tag: "FilteredOut";
9
9
  }>;
10
10
  export declare class FilteredOutSemverGroup extends FilteredOutSemverGroup_base<{
11
11
  config: GroupConfig;
12
12
  filter: string;
13
- instances: Instance[];
13
+ instances: Instance.Any[];
14
14
  }> {
15
15
  constructor(ctx: Ctx);
16
- canAdd(instance: Instance): boolean;
16
+ canAdd(instance: Instance.Any): boolean;
17
17
  inspect(): Effect.Effect<never, never, SemverGroupReport.FilteredOut>[];
18
18
  }
19
19
  export {};
@@ -33,7 +33,7 @@ class FilteredOutSemverGroup extends Data.TaggedClass('FilteredOut') {
33
33
  super({
34
34
  config: {
35
35
  dependencies: ['**'],
36
- dependencyTypes: [],
36
+ dependencyTypes: ['**'],
37
37
  label: 'Filtered out',
38
38
  packages: ['**'],
39
39
  },
@@ -2,16 +2,16 @@ import * as Data from '@effect/data/Data';
2
2
  import * as Effect from '@effect/io/Effect';
3
3
  import { SemverGroupReport } from '.';
4
4
  import type { SemverGroupConfig } from '../config/types';
5
- import type { Instance } from '../get-package-json-files/instance';
5
+ import type { Instance } from '../instance';
6
6
  declare const IgnoredSemverGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
7
  _tag: "Ignored";
8
8
  }>;
9
9
  export declare class IgnoredSemverGroup extends IgnoredSemverGroup_base<{
10
10
  config: SemverGroupConfig.Ignored;
11
- instances: Instance[];
11
+ instances: Instance.Any[];
12
12
  }> {
13
13
  constructor(config: SemverGroupConfig.Ignored);
14
- canAdd(_: Instance): boolean;
14
+ canAdd(_: Instance.Any): boolean;
15
15
  inspect(): Effect.Effect<never, never, SemverGroupReport.Ignored>[];
16
16
  }
17
17
  export {};
@@ -1,9 +1,9 @@
1
1
  import * as Data from '@effect/data/Data';
2
2
  import * as Effect from '@effect/io/Effect';
3
3
  import type { Union } from 'ts-toolbelt';
4
- import type { DeprecatedTypesError } from '../config/get-enabled-types';
4
+ import type { DeprecatedTypesError, RenamedWorkspaceTypeError } from '../config/get-enabled-types';
5
5
  import type { Ctx } from '../get-context';
6
- import type { Instance } from '../get-package-json-files/instance';
6
+ import type { Instance } from '../instance';
7
7
  import { FilteredOutSemverGroup } from './filtered-out';
8
8
  import { IgnoredSemverGroup } from './ignored';
9
9
  import { WithRangeSemverGroup } from './with-range';
@@ -14,7 +14,7 @@ export declare namespace SemverGroupReport {
14
14
  }>;
15
15
  export class FilteredOut extends FilteredOut_base<{
16
16
  name: string;
17
- instance: Instance;
17
+ instance: Instance.Any;
18
18
  readonly isValid: true;
19
19
  }> {
20
20
  }
@@ -23,7 +23,7 @@ export declare namespace SemverGroupReport {
23
23
  }>;
24
24
  export class Ignored extends Ignored_base<{
25
25
  name: string;
26
- instance: Instance;
26
+ instance: Instance.Any;
27
27
  readonly isValid: true;
28
28
  }> {
29
29
  }
@@ -32,16 +32,16 @@ export declare namespace SemverGroupReport {
32
32
  }>;
33
33
  export class Valid extends Valid_base<{
34
34
  name: string;
35
- instance: Instance;
35
+ instance: Instance.Any;
36
36
  readonly isValid: true;
37
37
  }> {
38
38
  }
39
- const WorkspaceSemverRangeMismatch_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
40
- _tag: "WorkspaceSemverRangeMismatch";
39
+ const LocalPackageSemverRangeMismatch_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
40
+ _tag: "LocalPackageSemverRangeMismatch";
41
41
  }>;
42
- export class WorkspaceSemverRangeMismatch extends WorkspaceSemverRangeMismatch_base<{
42
+ export class LocalPackageSemverRangeMismatch extends LocalPackageSemverRangeMismatch_base<{
43
43
  name: string;
44
- instance: Instance;
44
+ instance: Instance.Any;
45
45
  readonly isValid: false;
46
46
  readonly expectedVersion: string;
47
47
  }> {
@@ -51,24 +51,24 @@ export declare namespace SemverGroupReport {
51
51
  }>;
52
52
  export class SemverRangeMismatch extends SemverRangeMismatch_base<{
53
53
  name: string;
54
- instance: Instance;
54
+ instance: Instance.Any;
55
55
  readonly isValid: false;
56
56
  readonly expectedVersion: string;
57
57
  }> {
58
58
  }
59
- const UnsupportedVersion_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
60
- _tag: "UnsupportedVersion";
59
+ const NonSemverVersion_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
60
+ _tag: "NonSemverVersion";
61
61
  }>;
62
- export class UnsupportedVersion extends UnsupportedVersion_base<{
62
+ export class NonSemverVersion extends NonSemverVersion_base<{
63
63
  name: string;
64
- instance: Instance;
64
+ instance: Instance.Any;
65
65
  readonly isValid: false;
66
66
  }> {
67
67
  }
68
68
  export type ValidCases = Union.Strict<FilteredOut | Ignored | Valid>;
69
- export type InvalidCases = Union.Strict<SemverRangeMismatch | UnsupportedVersion | WorkspaceSemverRangeMismatch>;
70
- export type FixableCases = Union.Strict<SemverRangeMismatch | WorkspaceSemverRangeMismatch>;
71
- export type UnfixableCases = Union.Strict<UnsupportedVersion>;
69
+ export type InvalidCases = Union.Strict<SemverRangeMismatch | NonSemverVersion | LocalPackageSemverRangeMismatch>;
70
+ export type FixableCases = Union.Strict<SemverRangeMismatch | LocalPackageSemverRangeMismatch>;
71
+ export type UnfixableCases = Union.Strict<NonSemverVersion>;
72
72
  export type Any = Union.Strict<ValidCases | InvalidCases>;
73
73
  export {};
74
74
  }
@@ -80,5 +80,5 @@ export declare class SemverGroupConfigError extends SemverGroupConfigError_base<
80
80
  readonly error: string;
81
81
  }> {
82
82
  }
83
- export declare function getSemverGroups(ctx: Ctx): Effect.Effect<never, SemverGroupConfigError | DeprecatedTypesError, AnySemverGroup[]>;
83
+ export declare function getSemverGroups(ctx: Ctx): Effect.Effect<never, SemverGroupConfigError | DeprecatedTypesError | RenamedWorkspaceTypeError, AnySemverGroup[]>;
84
84
  export {};
@@ -50,21 +50,21 @@ var SemverGroupReport;
50
50
  class Valid extends Data.TaggedClass('Valid') {
51
51
  }
52
52
  SemverGroupReport.Valid = Valid;
53
- class WorkspaceSemverRangeMismatch extends Data.TaggedClass('WorkspaceSemverRangeMismatch') {
53
+ class LocalPackageSemverRangeMismatch extends Data.TaggedClass('LocalPackageSemverRangeMismatch') {
54
54
  }
55
- SemverGroupReport.WorkspaceSemverRangeMismatch = WorkspaceSemverRangeMismatch;
55
+ SemverGroupReport.LocalPackageSemverRangeMismatch = LocalPackageSemverRangeMismatch;
56
56
  class SemverRangeMismatch extends Data.TaggedClass('SemverRangeMismatch') {
57
57
  }
58
58
  SemverGroupReport.SemverRangeMismatch = SemverRangeMismatch;
59
- class UnsupportedVersion extends Data.TaggedClass('UnsupportedVersion') {
59
+ class NonSemverVersion extends Data.TaggedClass('NonSemverVersion') {
60
60
  }
61
- SemverGroupReport.UnsupportedVersion = UnsupportedVersion;
61
+ SemverGroupReport.NonSemverVersion = NonSemverVersion;
62
62
  })(SemverGroupReport || (exports.SemverGroupReport = SemverGroupReport = {}));
63
63
  class SemverGroupConfigError extends Data.TaggedClass('SemverGroupConfigError') {
64
64
  }
65
65
  exports.SemverGroupConfigError = SemverGroupConfigError;
66
66
  function getSemverGroups(ctx) {
67
- return (0, Function_1.pipe)(Effect.Do(), Effect.bind('enabledTypes', () => (0, get_enabled_types_1.getEnabledTypes)(ctx.config)), Effect.bind('semverGroups', () => createSemverGroups(ctx)), Effect.flatMap(({ enabledTypes, semverGroups }) => {
67
+ return (0, Function_1.pipe)(Effect.Do, Effect.bind('enabledTypes', () => (0, get_enabled_types_1.getEnabledTypes)(ctx.config)), Effect.bind('semverGroups', () => createSemverGroups(ctx)), Effect.flatMap(({ enabledTypes, semverGroups }) => {
68
68
  for (const file of ctx.packageJsonFiles) {
69
69
  instances: for (const instance of file.getInstances(enabledTypes)) {
70
70
  for (const group of semverGroups) {
@@ -2,17 +2,17 @@ import * as Data from '@effect/data/Data';
2
2
  import * as Effect from '@effect/io/Effect';
3
3
  import { SemverGroupReport } from '.';
4
4
  import type { SemverGroupConfig } from '../config/types';
5
- import type { Instance } from '../get-package-json-files/instance';
5
+ import type { Instance } from '../instance';
6
6
  declare const WithRangeSemverGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
7
  _tag: "WithRange";
8
8
  }>;
9
9
  export declare class WithRangeSemverGroup extends WithRangeSemverGroup_base<{
10
10
  config: SemverGroupConfig.WithRange;
11
- instances: Instance[];
11
+ instances: Instance.Any[];
12
12
  isCatchAll: boolean;
13
13
  }> {
14
14
  constructor(isCatchAll: boolean, config: SemverGroupConfig.WithRange);
15
- canAdd(_: Instance): boolean;
16
- inspect(): Effect.Effect<never, SemverGroupReport.UnsupportedVersion | SemverGroupReport.WorkspaceSemverRangeMismatch | SemverGroupReport.SemverRangeMismatch, SemverGroupReport.Valid>[];
15
+ canAdd(_: Instance.Any): boolean;
16
+ inspect(): Effect.Effect<never, SemverGroupReport.NonSemverVersion | SemverGroupReport.LocalPackageSemverRangeMismatch | SemverGroupReport.SemverRangeMismatch, SemverGroupReport.Valid>[];
17
17
  }
18
18
  export {};
@@ -25,9 +25,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.WithRangeSemverGroup = void 0;
27
27
  const Data = __importStar(require("@effect/data/Data"));
28
+ const Option = __importStar(require("@effect/data/Option"));
28
29
  const Effect = __importStar(require("@effect/io/Effect"));
29
30
  const _1 = require(".");
30
- const is_supported_1 = require("../guards/is-supported");
31
31
  const set_semver_range_1 = require("../lib/set-semver-range");
32
32
  class WithRangeSemverGroup extends Data.TaggedClass('WithRange') {
33
33
  constructor(isCatchAll, config) {
@@ -42,25 +42,25 @@ class WithRangeSemverGroup extends Data.TaggedClass('WithRange') {
42
42
  }
43
43
  inspect() {
44
44
  return this.instances.map((instance) => {
45
- if (!(0, is_supported_1.isSupported)(instance.version)) {
46
- return Effect.fail(new _1.SemverGroupReport.UnsupportedVersion({
45
+ if (Option.isNone(instance.getSemverSpecifier())) {
46
+ return Effect.fail(new _1.SemverGroupReport.NonSemverVersion({
47
47
  name: instance.name,
48
48
  instance,
49
49
  isValid: false,
50
50
  }));
51
51
  }
52
- const isWsInstance = instance.strategy.name === 'workspace';
53
- const exactVersion = (0, set_semver_range_1.setSemverRange)('', instance.version);
54
- const expectedVersion = (0, set_semver_range_1.setSemverRange)(this.config.range, instance.version);
55
- if (isWsInstance && instance.version !== exactVersion) {
56
- return Effect.fail(new _1.SemverGroupReport.WorkspaceSemverRangeMismatch({
52
+ const isLocalPackageInstance = instance.strategy.name === 'local';
53
+ const exactVersion = (0, set_semver_range_1.setSemverRange)('', instance.specifier);
54
+ const expectedVersion = (0, set_semver_range_1.setSemverRange)(this.config.range, instance.specifier);
55
+ if (isLocalPackageInstance && instance.specifier !== exactVersion) {
56
+ return Effect.fail(new _1.SemverGroupReport.LocalPackageSemverRangeMismatch({
57
57
  name: instance.name,
58
58
  instance,
59
59
  isValid: false,
60
60
  expectedVersion: exactVersion,
61
61
  }));
62
62
  }
63
- if (instance.version === expectedVersion) {
63
+ if (instance.specifier === expectedVersion) {
64
64
  return Effect.succeed(new _1.SemverGroupReport.Valid({
65
65
  name: instance.name,
66
66
  instance,
@@ -2,16 +2,16 @@ import * as Data from '@effect/data/Data';
2
2
  import * as Effect from '@effect/io/Effect';
3
3
  import { VersionGroupReport } from '.';
4
4
  import type { VersionGroupConfig } from '../config/types';
5
- import type { Instance } from '../get-package-json-files/instance';
5
+ import type { Instance } from '../instance';
6
6
  declare const BannedVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
7
  _tag: "Banned";
8
8
  }>;
9
9
  export declare class BannedVersionGroup extends BannedVersionGroup_base<{
10
10
  config: VersionGroupConfig.Banned;
11
- instances: Instance[];
11
+ instances: Instance.Any[];
12
12
  }> {
13
13
  constructor(config: VersionGroupConfig.Banned);
14
- canAdd(_: Instance): boolean;
14
+ canAdd(_: Instance.Any): boolean;
15
15
  inspect(): Effect.Effect<never, VersionGroupReport.Banned, never>[];
16
16
  }
17
17
  export {};
@@ -3,17 +3,17 @@ import * as Effect from '@effect/io/Effect';
3
3
  import { VersionGroupReport } from '.';
4
4
  import type { GroupConfig } from '../config/types';
5
5
  import type { Ctx } from '../get-context';
6
- import type { Instance } from '../get-package-json-files/instance';
6
+ import type { Instance } from '../instance';
7
7
  declare const FilteredOutVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
8
8
  _tag: "FilteredOut";
9
9
  }>;
10
10
  export declare class FilteredOutVersionGroup extends FilteredOutVersionGroup_base<{
11
11
  config: GroupConfig;
12
12
  filter: string;
13
- instances: Instance[];
13
+ instances: Instance.Any[];
14
14
  }> {
15
15
  constructor(ctx: Ctx);
16
- canAdd(instance: Instance): boolean;
16
+ canAdd(instance: Instance.Any): boolean;
17
17
  inspect(): Effect.Effect<never, never, VersionGroupReport.FilteredOut>[];
18
18
  }
19
19
  export {};
@@ -34,7 +34,7 @@ class FilteredOutVersionGroup extends Data.TaggedClass('FilteredOut') {
34
34
  super({
35
35
  config: {
36
36
  dependencies: ['**'],
37
- dependencyTypes: [],
37
+ dependencyTypes: ['**'],
38
38
  label: 'Filtered out',
39
39
  packages: ['**'],
40
40
  },
@@ -2,16 +2,16 @@ import * as Data from '@effect/data/Data';
2
2
  import * as Effect from '@effect/io/Effect';
3
3
  import { VersionGroupReport } from '.';
4
4
  import type { VersionGroupConfig } from '../config/types';
5
- import type { Instance } from '../get-package-json-files/instance';
5
+ import type { Instance } from '../instance';
6
6
  declare const IgnoredVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
7
  _tag: "Ignored";
8
8
  }>;
9
9
  export declare class IgnoredVersionGroup extends IgnoredVersionGroup_base<{
10
10
  config: VersionGroupConfig.Ignored;
11
- instances: Instance[];
11
+ instances: Instance.Any[];
12
12
  }> {
13
13
  constructor(config: VersionGroupConfig.Ignored);
14
- canAdd(_: Instance): boolean;
14
+ canAdd(_: Instance.Any): boolean;
15
15
  inspect(): Effect.Effect<never, never, VersionGroupReport.Ignored>[];
16
16
  }
17
17
  export {};