@neurodevs/meta-node 0.17.1 → 0.17.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.
@@ -6,6 +6,7 @@ export default class NpmReleasePropagatorTest extends AbstractPackageTest {
6
6
  protected static createsInstance(): Promise<void>;
7
7
  protected static runInstallsReleaseForEachRepoPath(): Promise<void>;
8
8
  protected static commitsChangesToGit(): Promise<void>;
9
+ protected static doesNotInstallIfAlreadyUpToDate(): Promise<void>;
9
10
  protected static throwsIfRepoDoesNotHavePreviousRelease(): Promise<void>;
10
11
  protected static throwsIfGitHasUncommittedChanges(): Promise<void>;
11
12
  private static run;
@@ -53,6 +53,16 @@ export default class NpmReleasePropagatorTest extends AbstractPackageTest {
53
53
  },
54
54
  ], 'Did not commit changes to git for each repo path!');
55
55
  }
56
+ static async doesNotInstallIfAlreadyUpToDate() {
57
+ setFakeReadFileResult(`${this.repoPaths[0]}/package.json`, JSON.stringify(this.generatePackageJson({
58
+ dependencies: {
59
+ [this.packageName]: this.packageVersion,
60
+ },
61
+ })));
62
+ await this.run();
63
+ const execCalls = callsToExec.filter((call) => call.command.includes(`yarn add`));
64
+ assert.isEqual(execCalls.length, 1, 'Should not have installed update!');
65
+ }
56
66
  static async throwsIfRepoDoesNotHavePreviousRelease() {
57
67
  const missingPackageName = this.generateId();
58
68
  this.instance = this.NpmReleasePropagator({
@@ -90,12 +100,12 @@ Please commit or stash these changes before running propagation!
90
100
  resetCallsToReadFile();
91
101
  setFakeReadFileResult(`${this.repoPaths[0]}/package.json`, JSON.stringify(this.generatePackageJson({
92
102
  dependencies: {
93
- [this.packageName]: this.generateId(),
103
+ [this.packageName]: '2.0.0',
94
104
  },
95
105
  })));
96
106
  setFakeReadFileResult(`${this.repoPaths[1]}/package.json`, JSON.stringify(this.generatePackageJson({
97
107
  devDependencies: {
98
- [this.packageName]: this.generateId(),
108
+ [this.packageName]: '2.0.0',
99
109
  },
100
110
  })));
101
111
  }
@@ -121,6 +131,9 @@ __decorate([
121
131
  __decorate([
122
132
  test()
123
133
  ], NpmReleasePropagatorTest, "commitsChangesToGit", null);
134
+ __decorate([
135
+ test()
136
+ ], NpmReleasePropagatorTest, "doesNotInstallIfAlreadyUpToDate", null);
124
137
  __decorate([
125
138
  test()
126
139
  ], NpmReleasePropagatorTest, "throwsIfRepoDoesNotHavePreviousRelease", null);
@@ -1 +1 @@
1
- {"version":3,"file":"NpmReleasePropagator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmReleasePropagator.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NpmReleasePropagator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmReleasePropagator.test.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,12 @@ export default class NpmReleasePropagator implements ReleasePropagator {
15
15
  run(): Promise<void>;
16
16
  private throwIfUncommittedGitChanges;
17
17
  private generateUncommittedErrorFrom;
18
- private throwIfPreviousReleaseNotFound;
19
18
  private loadCurrentPackageJson;
20
19
  private get currentPackageJsonPath();
21
- private get isDependency();
22
- private get isDevDependency();
20
+ private throwIfPreviousReleaseNotFound;
21
+ private get dependencyRange();
22
+ private get devDependencyRange();
23
+ private get isUpToDate();
23
24
  private installReleaseForCurrentRepo;
24
25
  private gitCommitChanges;
25
26
  private setCurrentMetaNodeVersion;
@@ -2,6 +2,7 @@ import { exec as execSync } from 'node:child_process';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import path from 'node:path';
4
4
  import { promisify } from 'node:util';
5
+ import { parse, minVersion, gte } from 'semver';
5
6
  import GitAutocommit from './GitAutocommit.js';
6
7
  export default class NpmReleasePropagator {
7
8
  static Class;
@@ -25,9 +26,13 @@ export default class NpmReleasePropagator {
25
26
  async run() {
26
27
  await this.throwIfUncommittedGitChanges();
27
28
  for (const repoPath of this.repoPaths) {
28
- console.log(`Propagating to ${repoPath}...`);
29
29
  this.currentRepoPath = repoPath;
30
- await this.throwIfPreviousReleaseNotFound();
30
+ await this.loadCurrentPackageJson();
31
+ this.throwIfPreviousReleaseNotFound();
32
+ if (this.isUpToDate) {
33
+ continue;
34
+ }
35
+ console.log(`Propagating to ${repoPath}...`);
31
36
  await this.installReleaseForCurrentRepo();
32
37
  await this.gitCommitChanges();
33
38
  }
@@ -55,12 +60,6 @@ export default class NpmReleasePropagator {
55
60
  Please commit or stash these changes before running propagation!
56
61
  `;
57
62
  }
58
- async throwIfPreviousReleaseNotFound() {
59
- await this.loadCurrentPackageJson();
60
- if (!(this.isDependency || this.isDevDependency)) {
61
- throw new Error(`Cannot propagate release for ${this.packageName} because it is not listed in either dependencies or devDependencies! Please install it in the target repository before running propagation.`);
62
- }
63
- }
64
63
  async loadCurrentPackageJson() {
65
64
  const raw = await this.readFile(this.currentPackageJsonPath, 'utf-8');
66
65
  this.currentPackageJson = JSON.parse(raw);
@@ -68,14 +67,29 @@ Please commit or stash these changes before running propagation!
68
67
  get currentPackageJsonPath() {
69
68
  return `${this.currentRepoPath}/package.json`;
70
69
  }
71
- get isDependency() {
72
- return this.currentPackageJson?.dependencies?.[this.packageName];
70
+ throwIfPreviousReleaseNotFound() {
71
+ if (!(this.dependencyRange || this.devDependencyRange)) {
72
+ throw new Error(`Cannot propagate release for ${this.packageName} because it is not listed in either dependencies or devDependencies! Please install it in the target repository before running propagation.`);
73
+ }
74
+ }
75
+ get dependencyRange() {
76
+ return this.currentPackageJson?.dependencies?.[this.packageName] ?? '';
73
77
  }
74
- get isDevDependency() {
75
- return this.currentPackageJson?.devDependencies?.[this.packageName];
78
+ get devDependencyRange() {
79
+ return (this.currentPackageJson?.devDependencies?.[this.packageName] ?? '');
80
+ }
81
+ get isUpToDate() {
82
+ const target = parse(this.packageVersion);
83
+ if (!target) {
84
+ return false;
85
+ }
86
+ const depMin = minVersion(this.dependencyRange ?? '');
87
+ const devDepMin = minVersion(this.devDependencyRange ?? '');
88
+ return ((depMin && gte(depMin, target)) ||
89
+ (devDepMin && gte(devDepMin, target)));
76
90
  }
77
91
  async installReleaseForCurrentRepo() {
78
- await this.exec(`yarn add ${this.isDevDependency ? '-D ' : ''}${this.packageName}@${this.packageVersion}`, {
92
+ await this.exec(`yarn add ${this.devDependencyRange ? '-D ' : ''}${this.packageName}@${this.packageVersion}`, {
79
93
  cwd: this.currentRepoPath,
80
94
  });
81
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NpmReleasePropagator.js","sourceRoot":"","sources":["../../src/impl/NpmReleasePropagator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NpmReleasePropagator.js","sourceRoot":"","sources":["../../src/impl/NpmReleasePropagator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/meta-node",
3
- "version": "0.17.1",
3
+ "version": "0.17.2",
4
4
  "description": "Meta-layer utilities for maintaining Node.js package ecosystems.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -56,7 +56,7 @@
56
56
  "devDependencies": {
57
57
  "@neurodevs/fake-node-core": "^0.7.3",
58
58
  "@neurodevs/generate-id": "^1.0.9",
59
- "@neurodevs/node-tdd": "^0.2.3",
59
+ "@neurodevs/node-tdd": "0.2.3",
60
60
  "@types/fs-extra": "^11.0.4",
61
61
  "@types/node": "^24.6.2",
62
62
  "@types/node-fetch": "^2.6.13",
@@ -85,6 +85,28 @@ export default class NpmReleasePropagatorTest extends AbstractPackageTest {
85
85
  )
86
86
  }
87
87
 
88
+ @test()
89
+ protected static async doesNotInstallIfAlreadyUpToDate() {
90
+ setFakeReadFileResult(
91
+ `${this.repoPaths[0]}/package.json`,
92
+ JSON.stringify(
93
+ this.generatePackageJson({
94
+ dependencies: {
95
+ [this.packageName]: this.packageVersion,
96
+ },
97
+ })
98
+ )
99
+ )
100
+
101
+ await this.run()
102
+
103
+ const execCalls = callsToExec.filter((call) =>
104
+ call.command.includes(`yarn add`)
105
+ )
106
+
107
+ assert.isEqual(execCalls.length, 1, 'Should not have installed update!')
108
+ }
109
+
88
110
  @test()
89
111
  protected static async throwsIfRepoDoesNotHavePreviousRelease() {
90
112
  const missingPackageName = this.generateId()
@@ -139,7 +161,7 @@ Please commit or stash these changes before running propagation!
139
161
  JSON.stringify(
140
162
  this.generatePackageJson({
141
163
  dependencies: {
142
- [this.packageName]: this.generateId(),
164
+ [this.packageName]: '2.0.0',
143
165
  },
144
166
  })
145
167
  )
@@ -150,7 +172,7 @@ Please commit or stash these changes before running propagation!
150
172
  JSON.stringify(
151
173
  this.generatePackageJson({
152
174
  devDependencies: {
153
- [this.packageName]: this.generateId(),
175
+ [this.packageName]: '2.0.0',
154
176
  },
155
177
  })
156
178
  )
@@ -3,6 +3,8 @@ import { readFile } from 'node:fs/promises'
3
3
  import path from 'node:path'
4
4
  import { promisify } from 'node:util'
5
5
 
6
+ import { parse, minVersion, gte } from 'semver'
7
+
6
8
  import GitAutocommit from './GitAutocommit.js'
7
9
 
8
10
  export default class NpmReleasePropagator implements ReleasePropagator {
@@ -34,11 +36,17 @@ export default class NpmReleasePropagator implements ReleasePropagator {
34
36
  await this.throwIfUncommittedGitChanges()
35
37
 
36
38
  for (const repoPath of this.repoPaths) {
37
- console.log(`Propagating to ${repoPath}...`)
38
39
  this.currentRepoPath = repoPath
39
40
 
40
- await this.throwIfPreviousReleaseNotFound()
41
+ await this.loadCurrentPackageJson()
41
42
 
43
+ this.throwIfPreviousReleaseNotFound()
44
+
45
+ if (this.isUpToDate) {
46
+ continue
47
+ }
48
+
49
+ console.log(`Propagating to ${repoPath}...`)
42
50
  await this.installReleaseForCurrentRepo()
43
51
  await this.gitCommitChanges()
44
52
  }
@@ -72,36 +80,52 @@ Please commit or stash these changes before running propagation!
72
80
  `
73
81
  }
74
82
 
75
- private async throwIfPreviousReleaseNotFound() {
76
- await this.loadCurrentPackageJson()
83
+ private async loadCurrentPackageJson() {
84
+ const raw = await this.readFile(this.currentPackageJsonPath, 'utf-8')
85
+ this.currentPackageJson = JSON.parse(raw)
86
+ }
77
87
 
78
- if (!(this.isDependency || this.isDevDependency)) {
88
+ private get currentPackageJsonPath() {
89
+ return `${this.currentRepoPath}/package.json`
90
+ }
91
+
92
+ private throwIfPreviousReleaseNotFound() {
93
+ if (!(this.dependencyRange || this.devDependencyRange)) {
79
94
  throw new Error(
80
95
  `Cannot propagate release for ${this.packageName} because it is not listed in either dependencies or devDependencies! Please install it in the target repository before running propagation.`
81
96
  )
82
97
  }
83
98
  }
84
99
 
85
- private async loadCurrentPackageJson() {
86
- const raw = await this.readFile(this.currentPackageJsonPath, 'utf-8')
87
- this.currentPackageJson = JSON.parse(raw)
100
+ private get dependencyRange() {
101
+ return this.currentPackageJson?.dependencies?.[this.packageName] ?? ''
88
102
  }
89
103
 
90
- private get currentPackageJsonPath() {
91
- return `${this.currentRepoPath}/package.json`
104
+ private get devDependencyRange() {
105
+ return (
106
+ this.currentPackageJson?.devDependencies?.[this.packageName] ?? ''
107
+ )
92
108
  }
93
109
 
94
- private get isDependency() {
95
- return this.currentPackageJson?.dependencies?.[this.packageName]
96
- }
110
+ private get isUpToDate() {
111
+ const target = parse(this.packageVersion)
112
+
113
+ if (!target) {
114
+ return false
115
+ }
116
+
117
+ const depMin = minVersion(this.dependencyRange ?? '')
118
+ const devDepMin = minVersion(this.devDependencyRange ?? '')
97
119
 
98
- private get isDevDependency() {
99
- return this.currentPackageJson?.devDependencies?.[this.packageName]
120
+ return (
121
+ (depMin && gte(depMin, target)) ||
122
+ (devDepMin && gte(devDepMin, target))
123
+ )
100
124
  }
101
125
 
102
126
  private async installReleaseForCurrentRepo() {
103
127
  await this.exec(
104
- `yarn add ${this.isDevDependency ? '-D ' : ''}${this.packageName}@${this.packageVersion}`,
128
+ `yarn add ${this.devDependencyRange ? '-D ' : ''}${this.packageName}@${this.packageVersion}`,
105
129
  {
106
130
  cwd: this.currentRepoPath,
107
131
  }