@neurodevs/meta-node 0.16.1 → 0.17.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/build/__tests__/AbstractPackageTest.d.ts +11 -0
- package/build/__tests__/AbstractPackageTest.js +13 -0
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/NpmPropagationCoordinator.test.d.ts +3 -7
- package/build/__tests__/impl/NpmPropagationCoordinator.test.js +29 -19
- package/build/__tests__/impl/NpmPropagationCoordinator.test.js.map +1 -1
- package/build/__tests__/impl/NpmReleasePropagator.test.d.ts +0 -2
- package/build/__tests__/impl/NpmReleasePropagator.test.js +4 -6
- package/build/__tests__/impl/NpmReleasePropagator.test.js.map +1 -1
- package/build/impl/NpmPropagationCoordinator.d.ts +8 -5
- package/build/impl/NpmPropagationCoordinator.js +17 -9
- package/build/impl/NpmPropagationCoordinator.js.map +1 -1
- package/build/impl/NpmReleasePropagator.js +2 -1
- package/build/impl/NpmReleasePropagator.js.map +1 -1
- package/build/testDoubles/PropagationCoordinator/FakePropagationCoordinator.js.map +1 -1
- package/package.json +4 -2
- package/src/__tests__/AbstractPackageTest.ts +16 -0
- package/src/__tests__/impl/NpmPropagationCoordinator.test.ts +43 -23
- package/src/__tests__/impl/NpmReleasePropagator.test.ts +14 -12
- package/src/impl/NpmPropagationCoordinator.ts +41 -12
- package/src/impl/NpmReleasePropagator.ts +2 -2
- package/src/testDoubles/PropagationCoordinator/FakePropagationCoordinator.ts +3 -1
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import AbstractModuleTest from '@neurodevs/node-tdd';
|
|
2
|
+
import { PackageJson } from '../impl/NpmReleasePropagator.js';
|
|
2
3
|
export default class AbstractPackageTest extends AbstractModuleTest {
|
|
4
|
+
protected static readonly packageScope: string;
|
|
5
|
+
protected static readonly packageName: string;
|
|
6
|
+
protected static readonly scopedName: string;
|
|
7
|
+
protected static readonly packageVersion = "2.2.0";
|
|
3
8
|
protected static readonly yarnGlobalDirCmd = "yarn global dir";
|
|
4
9
|
protected static readonly fakeGlobalRoot: string;
|
|
5
10
|
protected static readonly metaNodeVersion: string;
|
|
6
11
|
protected static beforeEach(): Promise<void>;
|
|
12
|
+
protected static generatePackageJson(options?: Partial<PackageJson>): {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
dependencies: Record<string, string>;
|
|
16
|
+
devDependencies: Record<string, string>;
|
|
17
|
+
};
|
|
7
18
|
protected static normalize(input: string): string;
|
|
8
19
|
protected static readonly vscodeDir: string;
|
|
9
20
|
protected static get snippetsPath(): string;
|
|
@@ -3,12 +3,25 @@ import { setFakeExecResult, setFakeReadFileResult, } from '@neurodevs/fake-node-
|
|
|
3
3
|
import AbstractModuleTest from '@neurodevs/node-tdd';
|
|
4
4
|
import expandHomeDir from '../functions/expandHomeDir.js';
|
|
5
5
|
export default class AbstractPackageTest extends AbstractModuleTest {
|
|
6
|
+
static packageScope = this.generateId();
|
|
7
|
+
static packageName = this.generateId();
|
|
8
|
+
static scopedName = `${this.packageScope}/${this.packageName}`;
|
|
9
|
+
static packageVersion = '2.2.0'; // Dummy value in tests to handle necessary cases
|
|
6
10
|
static yarnGlobalDirCmd = 'yarn global dir';
|
|
7
11
|
static fakeGlobalRoot = this.generateId();
|
|
8
12
|
static metaNodeVersion = this.generateId();
|
|
9
13
|
static async beforeEach() {
|
|
10
14
|
await super.beforeEach();
|
|
11
15
|
}
|
|
16
|
+
static generatePackageJson(options) {
|
|
17
|
+
return {
|
|
18
|
+
name: this.scopedName,
|
|
19
|
+
version: this.packageVersion,
|
|
20
|
+
dependencies: {},
|
|
21
|
+
devDependencies: {},
|
|
22
|
+
...options,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
12
25
|
static normalize(input) {
|
|
13
26
|
return input.replace(/\s+/g, ' ').trim();
|
|
14
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EACH,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,kBAAkB,MAAM,qBAAqB,CAAA;AAEpD,OAAO,aAAa,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class NpmPropagationCoordinatorTest extends
|
|
1
|
+
import AbstractPackageTest from '../AbstractPackageTest.js';
|
|
2
|
+
export default class NpmPropagationCoordinatorTest extends AbstractPackageTest {
|
|
3
3
|
private static instance;
|
|
4
|
-
private static readonly packageScope;
|
|
5
|
-
private static readonly packageName;
|
|
6
|
-
private static readonly scopedName;
|
|
7
|
-
private static readonly packageVersion;
|
|
8
4
|
private static readonly repoPath;
|
|
9
5
|
private static readonly repoPaths;
|
|
10
6
|
private static readonly pkgJsons;
|
|
11
7
|
protected static beforeEach(): Promise<void>;
|
|
12
8
|
protected static createsInstance(): Promise<void>;
|
|
13
9
|
protected static propagatesToCorrectRepoPaths(): Promise<void>;
|
|
10
|
+
protected static propagatesMajorsIfPassedOptionalParameter(): Promise<void>;
|
|
14
11
|
private static run;
|
|
15
|
-
private static generatePackageJson;
|
|
16
12
|
private static setFakeReadFile;
|
|
17
13
|
private static setFakeReleasePropagator;
|
|
18
14
|
private static NpmPropagationCoordinator;
|
|
@@ -5,29 +5,30 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { fakeReadFile, resetCallsToReadFile, setFakeReadFileResult, } from '@neurodevs/fake-node-core';
|
|
8
|
-
import
|
|
8
|
+
import { test, assert } from '@neurodevs/node-tdd';
|
|
9
9
|
import NpmPropagationCoordinator from '../../impl/NpmPropagationCoordinator.js';
|
|
10
10
|
import NpmReleasePropagator from '../../impl/NpmReleasePropagator.js';
|
|
11
11
|
import FakeReleasePropagator from '../../testDoubles/ReleasePropagator/FakeReleasePropagator.js';
|
|
12
|
-
|
|
12
|
+
import AbstractPackageTest from '../AbstractPackageTest.js';
|
|
13
|
+
export default class NpmPropagationCoordinatorTest extends AbstractPackageTest {
|
|
13
14
|
static instance;
|
|
14
|
-
static packageScope = this.generateId();
|
|
15
|
-
static packageName = this.generateId();
|
|
16
|
-
static scopedName = `${this.packageScope}/${this.packageName}`;
|
|
17
|
-
static packageVersion = '7.8.9';
|
|
18
15
|
static repoPath = `${this.generateId()}/${this.packageName}`;
|
|
19
16
|
static repoPaths = [
|
|
20
17
|
this.generateId(),
|
|
21
18
|
this.generateId(),
|
|
22
19
|
this.generateId(),
|
|
20
|
+
this.generateId(),
|
|
23
21
|
this.repoPath,
|
|
24
22
|
];
|
|
25
23
|
static pkgJsons = [
|
|
26
24
|
this.generatePackageJson({
|
|
27
|
-
dependencies: { [this.scopedName]: '^
|
|
25
|
+
dependencies: { [this.scopedName]: '^2.0.1' },
|
|
26
|
+
}),
|
|
27
|
+
this.generatePackageJson({
|
|
28
|
+
devDependencies: { [this.scopedName]: '^2.1.0' },
|
|
28
29
|
}),
|
|
29
30
|
this.generatePackageJson({
|
|
30
|
-
|
|
31
|
+
dependencies: { [this.scopedName]: '^1.0.0' },
|
|
31
32
|
}),
|
|
32
33
|
this.generatePackageJson(),
|
|
33
34
|
this.generatePackageJson({ version: this.packageVersion }),
|
|
@@ -49,18 +50,24 @@ export default class NpmPropagationCoordinatorTest extends AbstractModuleTest {
|
|
|
49
50
|
repoPaths: [this.repoPaths[0], this.repoPaths[1]],
|
|
50
51
|
}, 'Incorrect repo paths propagated to!');
|
|
51
52
|
}
|
|
53
|
+
static async propagatesMajorsIfPassedOptionalParameter() {
|
|
54
|
+
const instance = this.NpmPropagationCoordinator({
|
|
55
|
+
shouldPropagateMajors: true,
|
|
56
|
+
});
|
|
57
|
+
await instance.run();
|
|
58
|
+
assert.isEqualDeep(FakeReleasePropagator.callsToConstructor[0], {
|
|
59
|
+
packageName: this.scopedName,
|
|
60
|
+
packageVersion: this.packageVersion,
|
|
61
|
+
repoPaths: [
|
|
62
|
+
this.repoPaths[0],
|
|
63
|
+
this.repoPaths[1],
|
|
64
|
+
this.repoPaths[2],
|
|
65
|
+
],
|
|
66
|
+
}, 'Did not propagate majors!');
|
|
67
|
+
}
|
|
52
68
|
static async run() {
|
|
53
69
|
await this.instance.run();
|
|
54
70
|
}
|
|
55
|
-
static generatePackageJson(options) {
|
|
56
|
-
return {
|
|
57
|
-
name: this.scopedName,
|
|
58
|
-
version: this.packageVersion,
|
|
59
|
-
dependencies: {},
|
|
60
|
-
devDependencies: {},
|
|
61
|
-
...options,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
71
|
static setFakeReadFile() {
|
|
65
72
|
NpmPropagationCoordinator.readFile =
|
|
66
73
|
fakeReadFile;
|
|
@@ -73,8 +80,8 @@ export default class NpmPropagationCoordinatorTest extends AbstractModuleTest {
|
|
|
73
80
|
NpmReleasePropagator.Class = FakeReleasePropagator;
|
|
74
81
|
FakeReleasePropagator.resetTestDouble();
|
|
75
82
|
}
|
|
76
|
-
static NpmPropagationCoordinator() {
|
|
77
|
-
return NpmPropagationCoordinator.Create(this.repoPath, this.repoPaths);
|
|
83
|
+
static NpmPropagationCoordinator(options) {
|
|
84
|
+
return NpmPropagationCoordinator.Create(this.repoPath, this.repoPaths, options);
|
|
78
85
|
}
|
|
79
86
|
}
|
|
80
87
|
__decorate([
|
|
@@ -83,4 +90,7 @@ __decorate([
|
|
|
83
90
|
__decorate([
|
|
84
91
|
test()
|
|
85
92
|
], NpmPropagationCoordinatorTest, "propagatesToCorrectRepoPaths", null);
|
|
93
|
+
__decorate([
|
|
94
|
+
test()
|
|
95
|
+
], NpmPropagationCoordinatorTest, "propagatesMajorsIfPassedOptionalParameter", null);
|
|
86
96
|
//# sourceMappingURL=NpmPropagationCoordinator.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmPropagationCoordinator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmPropagationCoordinator.test.ts"],"names":[],"mappings":";;;;;;AAEA,OAAO,EACH,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"NpmPropagationCoordinator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmPropagationCoordinator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import AbstractPackageTest from '../AbstractPackageTest.js';
|
|
2
2
|
export default class NpmReleasePropagatorTest extends AbstractPackageTest {
|
|
3
3
|
private static instance;
|
|
4
|
-
private static readonly packageName;
|
|
5
|
-
private static readonly packageVersion;
|
|
6
4
|
private static readonly repoPaths;
|
|
7
5
|
protected static beforeEach(): Promise<void>;
|
|
8
6
|
protected static createsInstance(): Promise<void>;
|
|
@@ -15,8 +15,6 @@ import AbstractPackageTest from '../AbstractPackageTest.js';
|
|
|
15
15
|
const exec = promisify(execSync);
|
|
16
16
|
export default class NpmReleasePropagatorTest extends AbstractPackageTest {
|
|
17
17
|
static instance;
|
|
18
|
-
static packageName = this.generateId();
|
|
19
|
-
static packageVersion = this.generateId();
|
|
20
18
|
static repoPaths = [this.generateId(), this.generateId()];
|
|
21
19
|
static async beforeEach() {
|
|
22
20
|
await super.beforeEach();
|
|
@@ -76,16 +74,16 @@ export default class NpmReleasePropagatorTest extends AbstractPackageTest {
|
|
|
76
74
|
NpmReleasePropagator.readFile =
|
|
77
75
|
fakeReadFile;
|
|
78
76
|
resetCallsToReadFile();
|
|
79
|
-
setFakeReadFileResult(`${this.repoPaths[0]}/package.json`, JSON.stringify({
|
|
77
|
+
setFakeReadFileResult(`${this.repoPaths[0]}/package.json`, JSON.stringify(this.generatePackageJson({
|
|
80
78
|
dependencies: {
|
|
81
79
|
[this.packageName]: this.generateId(),
|
|
82
80
|
},
|
|
83
|
-
}));
|
|
84
|
-
setFakeReadFileResult(`${this.repoPaths[1]}/package.json`, JSON.stringify({
|
|
81
|
+
})));
|
|
82
|
+
setFakeReadFileResult(`${this.repoPaths[1]}/package.json`, JSON.stringify(this.generatePackageJson({
|
|
85
83
|
devDependencies: {
|
|
86
84
|
[this.packageName]: this.generateId(),
|
|
87
85
|
},
|
|
88
|
-
}));
|
|
86
|
+
})));
|
|
89
87
|
}
|
|
90
88
|
static setFakeAutocommit() {
|
|
91
89
|
GitAutocommit.Class = FakeAutocommit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmReleasePropagator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmReleasePropagator.test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EACH,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,aAAa,MAAM,6BAA6B,CAAA;AACvD,OAAO,oBAGN,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,mBAAmB,MAAM,2BAA2B,CAAA;AAE3D,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEhC,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,mBAAmB;IAC7D,MAAM,CAAC,QAAQ,CAAmB;IAElC,MAAM,CAAU,
|
|
1
|
+
{"version":3,"file":"NpmReleasePropagator.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmReleasePropagator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,18 +4,18 @@ export default class NpmPropagationCoordinator implements PropagationCoordinator
|
|
|
4
4
|
static readFile: typeof readFile;
|
|
5
5
|
private repoPath;
|
|
6
6
|
private repoPaths;
|
|
7
|
+
private shouldPropagateMajors;
|
|
7
8
|
private pkg;
|
|
8
9
|
private currentRepoPath;
|
|
9
10
|
private currentPkgJson;
|
|
10
|
-
protected constructor(repoPath: string, repoPaths: string[]);
|
|
11
|
-
static Create(repoPath: string, repoPaths: string[]): PropagationCoordinator;
|
|
11
|
+
protected constructor(repoPath: string, repoPaths: string[], options?: PropagationCoordinatorOptions);
|
|
12
|
+
static Create(repoPath: string, repoPaths: string[], options?: PropagationCoordinatorOptions): PropagationCoordinator;
|
|
12
13
|
run(): Promise<void>;
|
|
13
14
|
private loadPackageJson;
|
|
14
15
|
private get packageName();
|
|
15
16
|
private get packageVersion();
|
|
16
17
|
private determineWhereToPropagate;
|
|
17
|
-
private get
|
|
18
|
-
private get isDevDependency();
|
|
18
|
+
private get maybeDependencyRange();
|
|
19
19
|
private loadCurrentPkgJson;
|
|
20
20
|
private get readFile();
|
|
21
21
|
private NpmReleaseCoordinator;
|
|
@@ -23,4 +23,7 @@ export default class NpmPropagationCoordinator implements PropagationCoordinator
|
|
|
23
23
|
export interface PropagationCoordinator {
|
|
24
24
|
run(): Promise<void>;
|
|
25
25
|
}
|
|
26
|
-
export type PropagationCoordinatorConstructor = new (repoPath: string, repoPaths: string[]) => PropagationCoordinator;
|
|
26
|
+
export type PropagationCoordinatorConstructor = new (repoPath: string, repoPaths: string[], options?: PropagationCoordinatorOptions) => PropagationCoordinator;
|
|
27
|
+
export interface PropagationCoordinatorOptions {
|
|
28
|
+
shouldPropagateMajors?: boolean;
|
|
29
|
+
}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import semver from 'semver';
|
|
2
3
|
import NpmReleasePropagator from './NpmReleasePropagator.js';
|
|
3
4
|
export default class NpmPropagationCoordinator {
|
|
4
5
|
static Class;
|
|
5
6
|
static readFile = readFile;
|
|
6
7
|
repoPath;
|
|
7
8
|
repoPaths;
|
|
9
|
+
shouldPropagateMajors;
|
|
8
10
|
pkg;
|
|
9
11
|
currentRepoPath;
|
|
10
12
|
currentPkgJson;
|
|
11
|
-
constructor(repoPath, repoPaths) {
|
|
13
|
+
constructor(repoPath, repoPaths, options) {
|
|
14
|
+
const { shouldPropagateMajors = false } = options ?? {};
|
|
12
15
|
this.repoPath = repoPath;
|
|
13
16
|
this.repoPaths = repoPaths;
|
|
17
|
+
this.shouldPropagateMajors = shouldPropagateMajors;
|
|
14
18
|
}
|
|
15
|
-
static Create(repoPath, repoPaths) {
|
|
16
|
-
return new (this.Class ?? this)(repoPath, repoPaths);
|
|
19
|
+
static Create(repoPath, repoPaths, options) {
|
|
20
|
+
return new (this.Class ?? this)(repoPath, repoPaths, options);
|
|
17
21
|
}
|
|
18
22
|
async run() {
|
|
19
23
|
await this.loadPackageJson();
|
|
@@ -37,20 +41,24 @@ export default class NpmPropagationCoordinator {
|
|
|
37
41
|
}
|
|
38
42
|
async determineWhereToPropagate() {
|
|
39
43
|
const repoPaths = [];
|
|
44
|
+
const target = semver.parse(this.packageVersion);
|
|
40
45
|
for (const repoPath of this.repoPaths) {
|
|
41
46
|
this.currentRepoPath = repoPath;
|
|
42
47
|
this.currentPkgJson = await this.loadCurrentPkgJson();
|
|
43
|
-
|
|
48
|
+
const min = semver.minVersion(this.maybeDependencyRange);
|
|
49
|
+
if (!min || min.toString() === '0.0.0') {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (this.shouldPropagateMajors || min?.major === target?.major) {
|
|
44
53
|
repoPaths.push(repoPath);
|
|
45
54
|
}
|
|
46
55
|
}
|
|
47
56
|
return repoPaths;
|
|
48
57
|
}
|
|
49
|
-
get
|
|
50
|
-
return this.currentPkgJson
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return this.currentPkgJson.devDependencies[this.packageName];
|
|
58
|
+
get maybeDependencyRange() {
|
|
59
|
+
return (this.currentPkgJson?.dependencies?.[this.packageName] ??
|
|
60
|
+
this.currentPkgJson?.devDependencies?.[this.packageName] ??
|
|
61
|
+
'');
|
|
54
62
|
}
|
|
55
63
|
async loadCurrentPkgJson() {
|
|
56
64
|
const pkgJson = await this.readFile(`${this.currentRepoPath}/package.json`, 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmPropagationCoordinator.js","sourceRoot":"","sources":["../../src/impl/NpmPropagationCoordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,oBAGN,MAAM,2BAA2B,CAAA;AAElC,MAAM,CAAC,OAAO,OAAO,yBAAyB;
|
|
1
|
+
{"version":3,"file":"NpmPropagationCoordinator.js","sourceRoot":"","sources":["../../src/impl/NpmPropagationCoordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,14 +24,15 @@ export default class NpmReleasePropagator {
|
|
|
24
24
|
}
|
|
25
25
|
async run() {
|
|
26
26
|
for (const repoPath of this.repoPaths) {
|
|
27
|
+
console.log(`Propagating to ${repoPath}...`);
|
|
27
28
|
this.currentRepoPath = repoPath;
|
|
29
|
+
await this.loadCurrentPackageJson();
|
|
28
30
|
await this.throwIfPreviousReleaseNotFound();
|
|
29
31
|
await this.installReleaseForCurrentRepo();
|
|
30
32
|
await this.gitCommitChanges();
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
async throwIfPreviousReleaseNotFound() {
|
|
34
|
-
await this.loadCurrentPackageJson();
|
|
35
36
|
if (!(this.isDependency || this.isDevDependency)) {
|
|
36
37
|
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.`);
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmReleasePropagator.js","sourceRoot":"","sources":["../../src/impl/NpmReleasePropagator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,aAAa,MAAM,oBAAoB,CAAA;AAE9C,MAAM,CAAC,OAAO,OAAO,oBAAoB;IAC9B,MAAM,CAAC,KAAK,CAA+B;IAC3C,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAEzB,WAAW,CAAQ;IACnB,cAAc,CAAQ;IACtB,SAAS,CAAU;IAEnB,eAAe,CAAS;IACxB,kBAAkB,CAAc;IAChC,eAAe,CAAS;IAEhC,YAAsB,OAAiC;QACnD,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAE1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAiC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAA;YAE/B,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAA;YAC3C,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAA;YACzC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACjC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,8BAA8B;QACxC,
|
|
1
|
+
{"version":3,"file":"NpmReleasePropagator.js","sourceRoot":"","sources":["../../src/impl/NpmReleasePropagator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakePropagationCoordinator.js","sourceRoot":"","sources":["../../../src/testDoubles/PropagationCoordinator/FakePropagationCoordinator.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,0BAA0B;
|
|
1
|
+
{"version":3,"file":"FakePropagationCoordinator.js","sourceRoot":"","sources":["../../../src/testDoubles/PropagationCoordinator/FakePropagationCoordinator.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAGpC,MAAM,CAAC,kBAAkB,GAG1B,EAAE,CAAA;IAED,MAAM,CAAC,aAAa,GAAG,CAAC,CAAA;IAE/B,YAAmB,QAAiB,EAAE,SAAoB;QACtD,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC/C,QAAQ;YACR,SAAS;SACZ,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,0BAA0B,CAAC,aAAa,IAAI,CAAC,CAAA;IACjD,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,0BAA0B,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAClD,0BAA0B,CAAC,aAAa,GAAG,CAAC,CAAA;IAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurodevs/meta-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Meta-layer utilities for maintaining Node.js package ecosystems.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -50,7 +50,8 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"fs-extra": "^11.3.2",
|
|
53
|
-
"jsonc-parser": "^3.3.1"
|
|
53
|
+
"jsonc-parser": "^3.3.1",
|
|
54
|
+
"semver": "^7.7.3"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@neurodevs/fake-node-core": "^0.7.3",
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
"@types/fs-extra": "^11.0.4",
|
|
60
61
|
"@types/node": "^24.6.2",
|
|
61
62
|
"@types/node-fetch": "^2.6.13",
|
|
63
|
+
"@types/semver": "^7.7.1",
|
|
62
64
|
"chokidar-cli": "^3.0.0",
|
|
63
65
|
"eslint": "^9.37.0",
|
|
64
66
|
"eslint-config-spruce": "^11.2.26",
|
|
@@ -7,8 +7,14 @@ import {
|
|
|
7
7
|
import AbstractModuleTest from '@neurodevs/node-tdd'
|
|
8
8
|
|
|
9
9
|
import expandHomeDir from '../functions/expandHomeDir.js'
|
|
10
|
+
import { PackageJson } from '../impl/NpmReleasePropagator.js'
|
|
10
11
|
|
|
11
12
|
export default class AbstractPackageTest extends AbstractModuleTest {
|
|
13
|
+
protected static readonly packageScope = this.generateId()
|
|
14
|
+
protected static readonly packageName = this.generateId()
|
|
15
|
+
protected static readonly scopedName = `${this.packageScope}/${this.packageName}`
|
|
16
|
+
protected static readonly packageVersion = '2.2.0' // Dummy value in tests to handle necessary cases
|
|
17
|
+
|
|
12
18
|
protected static readonly yarnGlobalDirCmd = 'yarn global dir'
|
|
13
19
|
protected static readonly fakeGlobalRoot = this.generateId()
|
|
14
20
|
protected static readonly metaNodeVersion = this.generateId()
|
|
@@ -17,6 +23,16 @@ export default class AbstractPackageTest extends AbstractModuleTest {
|
|
|
17
23
|
await super.beforeEach()
|
|
18
24
|
}
|
|
19
25
|
|
|
26
|
+
protected static generatePackageJson(options?: Partial<PackageJson>) {
|
|
27
|
+
return {
|
|
28
|
+
name: this.scopedName,
|
|
29
|
+
version: this.packageVersion,
|
|
30
|
+
dependencies: {},
|
|
31
|
+
devDependencies: {},
|
|
32
|
+
...options,
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
20
36
|
protected static normalize(input: string) {
|
|
21
37
|
return input.replace(/\s+/g, ' ').trim()
|
|
22
38
|
}
|
|
@@ -5,38 +5,39 @@ import {
|
|
|
5
5
|
resetCallsToReadFile,
|
|
6
6
|
setFakeReadFileResult,
|
|
7
7
|
} from '@neurodevs/fake-node-core'
|
|
8
|
-
import
|
|
8
|
+
import { test, assert } from '@neurodevs/node-tdd'
|
|
9
9
|
|
|
10
10
|
import NpmPropagationCoordinator, {
|
|
11
11
|
PropagationCoordinator,
|
|
12
|
+
PropagationCoordinatorOptions,
|
|
12
13
|
} from '../../impl/NpmPropagationCoordinator.js'
|
|
13
|
-
import NpmReleasePropagator
|
|
14
|
-
PackageJson,
|
|
15
|
-
} from '../../impl/NpmReleasePropagator.js'
|
|
14
|
+
import NpmReleasePropagator from '../../impl/NpmReleasePropagator.js'
|
|
16
15
|
import FakeReleasePropagator from '../../testDoubles/ReleasePropagator/FakeReleasePropagator.js'
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
import AbstractPackageTest from '../AbstractPackageTest.js'
|
|
18
|
+
|
|
19
|
+
export default class NpmPropagationCoordinatorTest extends AbstractPackageTest {
|
|
19
20
|
private static instance: PropagationCoordinator
|
|
20
21
|
|
|
21
|
-
private static readonly packageScope = this.generateId()
|
|
22
|
-
private static readonly packageName = this.generateId()
|
|
23
|
-
private static readonly scopedName = `${this.packageScope}/${this.packageName}`
|
|
24
|
-
private static readonly packageVersion = '7.8.9'
|
|
25
22
|
private static readonly repoPath = `${this.generateId()}/${this.packageName}`
|
|
26
23
|
|
|
27
24
|
private static readonly repoPaths = [
|
|
28
25
|
this.generateId(),
|
|
29
26
|
this.generateId(),
|
|
30
27
|
this.generateId(),
|
|
28
|
+
this.generateId(),
|
|
31
29
|
this.repoPath,
|
|
32
30
|
]
|
|
33
31
|
|
|
34
32
|
private static readonly pkgJsons = [
|
|
35
33
|
this.generatePackageJson({
|
|
36
|
-
dependencies: { [this.scopedName]: '^
|
|
34
|
+
dependencies: { [this.scopedName]: '^2.0.1' },
|
|
37
35
|
}),
|
|
38
36
|
this.generatePackageJson({
|
|
39
|
-
devDependencies: { [this.scopedName]: '^
|
|
37
|
+
devDependencies: { [this.scopedName]: '^2.1.0' },
|
|
38
|
+
}),
|
|
39
|
+
this.generatePackageJson({
|
|
40
|
+
dependencies: { [this.scopedName]: '^1.0.0' },
|
|
40
41
|
}),
|
|
41
42
|
this.generatePackageJson(),
|
|
42
43
|
this.generatePackageJson({ version: this.packageVersion }),
|
|
@@ -71,18 +72,31 @@ export default class NpmPropagationCoordinatorTest extends AbstractModuleTest {
|
|
|
71
72
|
)
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
@test()
|
|
76
|
+
protected static async propagatesMajorsIfPassedOptionalParameter() {
|
|
77
|
+
const instance = this.NpmPropagationCoordinator({
|
|
78
|
+
shouldPropagateMajors: true,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
await instance.run()
|
|
82
|
+
|
|
83
|
+
assert.isEqualDeep(
|
|
84
|
+
FakeReleasePropagator.callsToConstructor[0],
|
|
85
|
+
{
|
|
86
|
+
packageName: this.scopedName,
|
|
87
|
+
packageVersion: this.packageVersion,
|
|
88
|
+
repoPaths: [
|
|
89
|
+
this.repoPaths[0],
|
|
90
|
+
this.repoPaths[1],
|
|
91
|
+
this.repoPaths[2],
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
'Did not propagate majors!'
|
|
95
|
+
)
|
|
76
96
|
}
|
|
77
97
|
|
|
78
|
-
private static
|
|
79
|
-
|
|
80
|
-
name: this.scopedName,
|
|
81
|
-
version: this.packageVersion,
|
|
82
|
-
dependencies: {},
|
|
83
|
-
devDependencies: {},
|
|
84
|
-
...options,
|
|
85
|
-
}
|
|
98
|
+
private static async run() {
|
|
99
|
+
await this.instance.run()
|
|
86
100
|
}
|
|
87
101
|
|
|
88
102
|
private static setFakeReadFile() {
|
|
@@ -103,7 +117,13 @@ export default class NpmPropagationCoordinatorTest extends AbstractModuleTest {
|
|
|
103
117
|
FakeReleasePropagator.resetTestDouble()
|
|
104
118
|
}
|
|
105
119
|
|
|
106
|
-
private static NpmPropagationCoordinator(
|
|
107
|
-
|
|
120
|
+
private static NpmPropagationCoordinator(
|
|
121
|
+
options?: PropagationCoordinatorOptions
|
|
122
|
+
) {
|
|
123
|
+
return NpmPropagationCoordinator.Create(
|
|
124
|
+
this.repoPath,
|
|
125
|
+
this.repoPaths,
|
|
126
|
+
options
|
|
127
|
+
)
|
|
108
128
|
}
|
|
109
129
|
}
|
|
@@ -24,8 +24,6 @@ const exec = promisify(execSync)
|
|
|
24
24
|
export default class NpmReleasePropagatorTest extends AbstractPackageTest {
|
|
25
25
|
private static instance: ReleasePropagator
|
|
26
26
|
|
|
27
|
-
private static readonly packageName = this.generateId()
|
|
28
|
-
private static readonly packageVersion = this.generateId()
|
|
29
27
|
private static readonly repoPaths = [this.generateId(), this.generateId()]
|
|
30
28
|
|
|
31
29
|
protected static async beforeEach() {
|
|
@@ -116,20 +114,24 @@ export default class NpmReleasePropagatorTest extends AbstractPackageTest {
|
|
|
116
114
|
|
|
117
115
|
setFakeReadFileResult(
|
|
118
116
|
`${this.repoPaths[0]}/package.json`,
|
|
119
|
-
JSON.stringify(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
117
|
+
JSON.stringify(
|
|
118
|
+
this.generatePackageJson({
|
|
119
|
+
dependencies: {
|
|
120
|
+
[this.packageName]: this.generateId(),
|
|
121
|
+
},
|
|
122
|
+
})
|
|
123
|
+
)
|
|
124
124
|
)
|
|
125
125
|
|
|
126
126
|
setFakeReadFileResult(
|
|
127
127
|
`${this.repoPaths[1]}/package.json`,
|
|
128
|
-
JSON.stringify(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
JSON.stringify(
|
|
129
|
+
this.generatePackageJson({
|
|
130
|
+
devDependencies: {
|
|
131
|
+
[this.packageName]: this.generateId(),
|
|
132
|
+
},
|
|
133
|
+
})
|
|
134
|
+
)
|
|
133
135
|
)
|
|
134
136
|
}
|
|
135
137
|
|
|
@@ -1,28 +1,44 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises'
|
|
2
2
|
|
|
3
|
+
import semver from 'semver'
|
|
4
|
+
|
|
3
5
|
import NpmReleasePropagator, {
|
|
4
6
|
PackageJson,
|
|
5
7
|
ReleasePropagatorOptions,
|
|
6
8
|
} from './NpmReleasePropagator.js'
|
|
7
9
|
|
|
8
|
-
export default class NpmPropagationCoordinator
|
|
10
|
+
export default class NpmPropagationCoordinator
|
|
11
|
+
implements PropagationCoordinator
|
|
12
|
+
{
|
|
9
13
|
public static Class?: PropagationCoordinatorConstructor
|
|
10
14
|
public static readFile = readFile
|
|
11
15
|
|
|
12
16
|
private repoPath: string
|
|
13
17
|
private repoPaths: string[]
|
|
18
|
+
private shouldPropagateMajors: boolean
|
|
14
19
|
|
|
15
20
|
private pkg!: PackageJson
|
|
16
21
|
private currentRepoPath!: string
|
|
17
22
|
private currentPkgJson!: PackageJson
|
|
18
23
|
|
|
19
|
-
protected constructor(
|
|
24
|
+
protected constructor(
|
|
25
|
+
repoPath: string,
|
|
26
|
+
repoPaths: string[],
|
|
27
|
+
options?: PropagationCoordinatorOptions
|
|
28
|
+
) {
|
|
29
|
+
const { shouldPropagateMajors = false } = options ?? {}
|
|
30
|
+
|
|
20
31
|
this.repoPath = repoPath
|
|
21
32
|
this.repoPaths = repoPaths
|
|
33
|
+
this.shouldPropagateMajors = shouldPropagateMajors
|
|
22
34
|
}
|
|
23
35
|
|
|
24
|
-
public static Create(
|
|
25
|
-
|
|
36
|
+
public static Create(
|
|
37
|
+
repoPath: string,
|
|
38
|
+
repoPaths: string[],
|
|
39
|
+
options?: PropagationCoordinatorOptions
|
|
40
|
+
) {
|
|
41
|
+
return new (this.Class ?? this)(repoPath, repoPaths, options)
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
public async run() {
|
|
@@ -58,23 +74,31 @@ export default class NpmPropagationCoordinator implements PropagationCoordinator
|
|
|
58
74
|
private async determineWhereToPropagate() {
|
|
59
75
|
const repoPaths: string[] = []
|
|
60
76
|
|
|
77
|
+
const target = semver.parse(this.packageVersion)
|
|
78
|
+
|
|
61
79
|
for (const repoPath of this.repoPaths) {
|
|
62
80
|
this.currentRepoPath = repoPath
|
|
63
81
|
this.currentPkgJson = await this.loadCurrentPkgJson()
|
|
64
82
|
|
|
65
|
-
|
|
83
|
+
const min = semver.minVersion(this.maybeDependencyRange)
|
|
84
|
+
|
|
85
|
+
if (!min || min.toString() === '0.0.0') {
|
|
86
|
+
continue
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (this.shouldPropagateMajors || min?.major === target?.major) {
|
|
66
90
|
repoPaths.push(repoPath)
|
|
67
91
|
}
|
|
68
92
|
}
|
|
69
93
|
return repoPaths
|
|
70
94
|
}
|
|
71
95
|
|
|
72
|
-
private get
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
96
|
+
private get maybeDependencyRange() {
|
|
97
|
+
return (
|
|
98
|
+
this.currentPkgJson?.dependencies?.[this.packageName] ??
|
|
99
|
+
this.currentPkgJson?.devDependencies?.[this.packageName] ??
|
|
100
|
+
''
|
|
101
|
+
)
|
|
78
102
|
}
|
|
79
103
|
|
|
80
104
|
private async loadCurrentPkgJson() {
|
|
@@ -100,5 +124,10 @@ export interface PropagationCoordinator {
|
|
|
100
124
|
|
|
101
125
|
export type PropagationCoordinatorConstructor = new (
|
|
102
126
|
repoPath: string,
|
|
103
|
-
repoPaths: string[]
|
|
127
|
+
repoPaths: string[],
|
|
128
|
+
options?: PropagationCoordinatorOptions
|
|
104
129
|
) => PropagationCoordinator
|
|
130
|
+
|
|
131
|
+
export interface PropagationCoordinatorOptions {
|
|
132
|
+
shouldPropagateMajors?: boolean
|
|
133
|
+
}
|
|
@@ -32,8 +32,10 @@ export default class NpmReleasePropagator implements ReleasePropagator {
|
|
|
32
32
|
|
|
33
33
|
public async run() {
|
|
34
34
|
for (const repoPath of this.repoPaths) {
|
|
35
|
+
console.log(`Propagating to ${repoPath}...`)
|
|
35
36
|
this.currentRepoPath = repoPath
|
|
36
37
|
|
|
38
|
+
await this.loadCurrentPackageJson()
|
|
37
39
|
await this.throwIfPreviousReleaseNotFound()
|
|
38
40
|
await this.installReleaseForCurrentRepo()
|
|
39
41
|
await this.gitCommitChanges()
|
|
@@ -41,8 +43,6 @@ export default class NpmReleasePropagator implements ReleasePropagator {
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
private async throwIfPreviousReleaseNotFound() {
|
|
44
|
-
await this.loadCurrentPackageJson()
|
|
45
|
-
|
|
46
46
|
if (!(this.isDependency || this.isDevDependency)) {
|
|
47
47
|
throw new Error(
|
|
48
48
|
`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.`
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { PropagationCoordinator } from '../../impl/NpmPropagationCoordinator.js'
|
|
2
2
|
|
|
3
|
-
export default class FakePropagationCoordinator
|
|
3
|
+
export default class FakePropagationCoordinator
|
|
4
|
+
implements PropagationCoordinator
|
|
5
|
+
{
|
|
4
6
|
public static callsToConstructor: {
|
|
5
7
|
repoPath?: string
|
|
6
8
|
repoPaths?: string[]
|