@aneuhold/core-ts-lib 1.1.52 → 2.0.6
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/LICENSE +21 -0
- package/lib/helperFunctions/sleep.d.ts.map +1 -1
- package/lib/helperFunctions/sleep.js +2 -4
- package/lib/helperFunctions/sleep.js.map +1 -0
- package/lib/helperFunctions/sleep.ts +8 -0
- package/lib/index.d.ts +12 -12
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -26
- package/lib/index.js.map +1 -0
- package/lib/index.ts +29 -0
- package/lib/services/ArrayService.d.ts +8 -0
- package/lib/services/ArrayService.d.ts.map +1 -1
- package/lib/services/ArrayService.js +10 -4
- package/lib/services/ArrayService.js.map +1 -0
- package/lib/services/ArrayService.ts +26 -0
- package/lib/services/DateService/DateService.d.ts +8 -0
- package/lib/services/DateService/DateService.d.ts.map +1 -1
- package/lib/services/DateService/DateService.js +14 -4
- package/lib/services/DateService/DateService.js.map +1 -0
- package/lib/services/DateService/DateService.spec.ts +98 -0
- package/lib/services/DateService/DateService.ts +209 -0
- package/lib/services/DependencyService.d.ts +19 -3
- package/lib/services/DependencyService.d.ts.map +1 -1
- package/lib/services/DependencyService.js +66 -17
- package/lib/services/DependencyService.js.map +1 -0
- package/lib/services/DependencyService.ts +156 -0
- package/lib/services/FileSystemService/FileSystemService.d.ts +7 -0
- package/lib/services/FileSystemService/FileSystemService.d.ts.map +1 -1
- package/lib/services/FileSystemService/FileSystemService.js +49 -34
- package/lib/services/FileSystemService/FileSystemService.js.map +1 -0
- package/lib/services/FileSystemService/FileSystemService.spec.ts +117 -0
- package/lib/services/FileSystemService/FileSystemService.ts +185 -0
- package/lib/services/PackageService.d.ts +28 -0
- package/lib/services/PackageService.d.ts.map +1 -0
- package/lib/services/PackageService.js +131 -0
- package/lib/services/PackageService.js.map +1 -0
- package/lib/services/PackageService.ts +148 -0
- package/lib/services/StringService.d.ts.map +1 -1
- package/lib/services/StringService.js +2 -4
- package/lib/services/StringService.js.map +1 -0
- package/lib/services/StringService.ts +15 -0
- package/lib/utils/ErrorUtils.d.ts +7 -0
- package/lib/utils/ErrorUtils.d.ts.map +1 -1
- package/lib/utils/ErrorUtils.js +19 -4
- package/lib/utils/ErrorUtils.js.map +1 -0
- package/lib/utils/ErrorUtils.ts +37 -0
- package/lib/utils/Logger.d.ts +3 -0
- package/lib/utils/Logger.d.ts.map +1 -1
- package/lib/utils/Logger.js +5 -4
- package/lib/utils/Logger.js.map +1 -0
- package/lib/utils/Logger.ts +122 -0
- package/lib/utils/TestUtils.d.ts +3 -0
- package/lib/utils/TestUtils.d.ts.map +1 -1
- package/lib/utils/TestUtils.js +9 -8
- package/lib/utils/TestUtils.js.map +1 -0
- package/lib/utils/TestUtils.ts +33 -0
- package/package.json +29 -21
- package/readme.md +61 -2
- package/lib/helperFunctions/dateFunctions.d.ts +0 -10
- package/lib/helperFunctions/dateFunctions.d.ts.map +0 -1
- package/lib/helperFunctions/dateFunctions.js +0 -15
- package/lib/services/DateService/DateService.spec.d.ts +0 -2
- package/lib/services/DateService/DateService.spec.d.ts.map +0 -1
- package/lib/services/DateService/DateService.spec.js +0 -62
- package/lib/services/FileSystemService/FileSystemService.spec.d.ts +0 -2
- package/lib/services/FileSystemService/FileSystemService.spec.d.ts.map +0 -1
- package/lib/services/FileSystemService/FileSystemService.spec.js +0 -88
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyService.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"DependencyService.d.ts","sourceRoot":"./src/","sources":["services/DependencyService.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAY,SAAQ,uBAAuB;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;OAIG;WACU,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgErD;;;;OAIG;WACU,WAAW,CACtB,WAAW,GAAE,WAA+B,GAC3C,OAAO,CAAC,IAAI,CAAC;CA+CjB"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { access, readFile, writeFile } from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import ErrorUtils from '../utils/ErrorUtils.js';
|
|
4
|
+
import Logger from '../utils/Logger.js';
|
|
5
|
+
import FileSystemService from './FileSystemService/FileSystemService.js';
|
|
6
|
+
/**
|
|
7
|
+
* Standard Semantic Versioning bump types.
|
|
8
|
+
*/
|
|
9
|
+
export var VersionType;
|
|
10
|
+
(function (VersionType) {
|
|
11
|
+
VersionType["Patch"] = "patch";
|
|
12
|
+
VersionType["Minor"] = "minor";
|
|
13
|
+
VersionType["Major"] = "major";
|
|
14
|
+
})(VersionType || (VersionType = {}));
|
|
9
15
|
/**
|
|
10
16
|
* A service which can be used to manage dependencies in the current project
|
|
11
17
|
* in various ways.
|
|
12
18
|
*/
|
|
13
|
-
class DependencyService {
|
|
19
|
+
export default class DependencyService {
|
|
14
20
|
/**
|
|
15
21
|
* Updates the package.json files of all sub-directories based on the root
|
|
16
22
|
* package.json file. This will match any versions of dependencies in the
|
|
@@ -18,16 +24,16 @@ class DependencyService {
|
|
|
18
24
|
*/
|
|
19
25
|
static async updateChildPackageJsons() {
|
|
20
26
|
// Read the root package.json file
|
|
21
|
-
const rootPackageJsonPath =
|
|
27
|
+
const rootPackageJsonPath = path.join(process.cwd(), 'package.json');
|
|
22
28
|
try {
|
|
23
|
-
await
|
|
29
|
+
await access(rootPackageJsonPath);
|
|
24
30
|
}
|
|
25
31
|
catch {
|
|
26
32
|
throw new Error('No package.json file found in the current directory.');
|
|
27
33
|
}
|
|
28
|
-
const rootPackageJsonData = JSON.parse(await
|
|
34
|
+
const rootPackageJsonData = JSON.parse(await readFile(rootPackageJsonPath, 'utf-8'));
|
|
29
35
|
// Get all files and in the current directory
|
|
30
|
-
const filePaths = await
|
|
36
|
+
const filePaths = await FileSystemService.getAllFilePathsRelative(process.cwd());
|
|
31
37
|
const packageJsonPaths = filePaths.filter((filePath) => !filePath.includes('node_modules') &&
|
|
32
38
|
!filePath.includes('dist') &&
|
|
33
39
|
!filePath.includes('build') &&
|
|
@@ -39,8 +45,8 @@ class DependencyService {
|
|
|
39
45
|
};
|
|
40
46
|
// Iterate over all package.json files
|
|
41
47
|
await Promise.all(packageJsonPaths.map(async (packageJsonPath) => {
|
|
42
|
-
const fullPackageJsonPath =
|
|
43
|
-
const packageJsonData = JSON.parse(await
|
|
48
|
+
const fullPackageJsonPath = path.join(process.cwd(), packageJsonPath);
|
|
49
|
+
const packageJsonData = JSON.parse(await readFile(fullPackageJsonPath, 'utf-8'));
|
|
44
50
|
const dependencies = packageJsonData.dependencies;
|
|
45
51
|
if (dependencies) {
|
|
46
52
|
Object.keys(dependencies).forEach((dependency) => {
|
|
@@ -58,8 +64,51 @@ class DependencyService {
|
|
|
58
64
|
});
|
|
59
65
|
}
|
|
60
66
|
// Write the updated package.json file
|
|
61
|
-
await
|
|
67
|
+
await writeFile(fullPackageJsonPath, JSON.stringify(packageJsonData, null, 2));
|
|
62
68
|
}));
|
|
63
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Bumps the version of the package.json and jsr.json files in the current
|
|
72
|
+
* working directory.
|
|
73
|
+
* @param versionType The type of version bump (patch, minor, major).
|
|
74
|
+
*/
|
|
75
|
+
static async bumpVersion(versionType = VersionType.Patch) {
|
|
76
|
+
const bump = (version) => {
|
|
77
|
+
const [major, minor, patch] = version.split('.').map(Number);
|
|
78
|
+
switch (versionType) {
|
|
79
|
+
case VersionType.Major:
|
|
80
|
+
return `${major + 1}.0.0`;
|
|
81
|
+
case VersionType.Minor:
|
|
82
|
+
return `${major}.${minor + 1}.0`;
|
|
83
|
+
case VersionType.Patch:
|
|
84
|
+
default:
|
|
85
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const updateVersion = async (filePath) => {
|
|
89
|
+
try {
|
|
90
|
+
await access(filePath);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
Logger.info(`No ${path.basename(filePath)} file found in the current directory.`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const fileData = JSON.parse(await readFile(filePath, 'utf-8'));
|
|
98
|
+
const oldVersion = fileData.version;
|
|
99
|
+
const newVersion = bump(oldVersion);
|
|
100
|
+
fileData.version = newVersion;
|
|
101
|
+
await writeFile(filePath, JSON.stringify(fileData, null, 2));
|
|
102
|
+
Logger.info(`Bumped ${path.basename(filePath)} from ${oldVersion} to ${newVersion}`);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const errorString = ErrorUtils.getErrorString(error);
|
|
106
|
+
Logger.error(`Failed to update ${path.basename(filePath)}: ${errorString}`);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const rootDir = process.cwd();
|
|
110
|
+
await updateVersion(path.join(rootDir, 'package.json'));
|
|
111
|
+
await updateVersion(path.join(rootDir, 'jsr.json'));
|
|
112
|
+
}
|
|
64
113
|
}
|
|
65
|
-
|
|
114
|
+
//# sourceMappingURL=DependencyService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyService.js","sourceRoot":"./src/","sources":["services/DependencyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { access, readFile, writeFile } from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import ErrorUtils from '../utils/ErrorUtils.js';
|
|
4
|
+
import Logger from '../utils/Logger.js';
|
|
5
|
+
import FileSystemService from './FileSystemService/FileSystemService.js';
|
|
6
|
+
|
|
7
|
+
export interface PackageJson extends JsonWithVersionProperty {
|
|
8
|
+
name: string;
|
|
9
|
+
dependencies?: Record<string, string>;
|
|
10
|
+
devDependencies?: Record<string, string>;
|
|
11
|
+
peerDependencies?: Record<string, string>;
|
|
12
|
+
optionalDependencies?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface JsonWithVersionProperty {
|
|
16
|
+
version: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Standard Semantic Versioning bump types.
|
|
21
|
+
*/
|
|
22
|
+
export enum VersionType {
|
|
23
|
+
Patch = 'patch',
|
|
24
|
+
Minor = 'minor',
|
|
25
|
+
Major = 'major'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A service which can be used to manage dependencies in the current project
|
|
30
|
+
* in various ways.
|
|
31
|
+
*/
|
|
32
|
+
export default class DependencyService {
|
|
33
|
+
/**
|
|
34
|
+
* Updates the package.json files of all sub-directories based on the root
|
|
35
|
+
* package.json file. This will match any versions of dependencies in the
|
|
36
|
+
* sub-directories to the version in the root package.json file.
|
|
37
|
+
*/
|
|
38
|
+
static async updateChildPackageJsons(): Promise<void> {
|
|
39
|
+
// Read the root package.json file
|
|
40
|
+
const rootPackageJsonPath = path.join(process.cwd(), 'package.json');
|
|
41
|
+
try {
|
|
42
|
+
await access(rootPackageJsonPath);
|
|
43
|
+
} catch {
|
|
44
|
+
throw new Error('No package.json file found in the current directory.');
|
|
45
|
+
}
|
|
46
|
+
const rootPackageJsonData = JSON.parse(
|
|
47
|
+
await readFile(rootPackageJsonPath, 'utf-8')
|
|
48
|
+
) as PackageJson;
|
|
49
|
+
|
|
50
|
+
// Get all files and in the current directory
|
|
51
|
+
const filePaths = await FileSystemService.getAllFilePathsRelative(
|
|
52
|
+
process.cwd()
|
|
53
|
+
);
|
|
54
|
+
const packageJsonPaths = filePaths.filter(
|
|
55
|
+
(filePath) =>
|
|
56
|
+
!filePath.includes('node_modules') &&
|
|
57
|
+
!filePath.includes('dist') &&
|
|
58
|
+
!filePath.includes('build') &&
|
|
59
|
+
filePath !== '/package.json' &&
|
|
60
|
+
filePath.endsWith('package.json')
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const rootDependencies = {
|
|
64
|
+
...rootPackageJsonData.dependencies,
|
|
65
|
+
...rootPackageJsonData.devDependencies
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// Iterate over all package.json files
|
|
69
|
+
await Promise.all(
|
|
70
|
+
packageJsonPaths.map(async (packageJsonPath) => {
|
|
71
|
+
const fullPackageJsonPath = path.join(process.cwd(), packageJsonPath);
|
|
72
|
+
const packageJsonData = JSON.parse(
|
|
73
|
+
await readFile(fullPackageJsonPath, 'utf-8')
|
|
74
|
+
) as PackageJson;
|
|
75
|
+
|
|
76
|
+
const dependencies = packageJsonData.dependencies;
|
|
77
|
+
if (dependencies) {
|
|
78
|
+
Object.keys(dependencies).forEach((dependency) => {
|
|
79
|
+
if (rootDependencies[dependency]) {
|
|
80
|
+
dependencies[dependency] = rootDependencies[dependency];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const devDependencies = packageJsonData.devDependencies;
|
|
85
|
+
if (devDependencies) {
|
|
86
|
+
Object.keys(devDependencies).forEach((dependency) => {
|
|
87
|
+
if (rootDependencies[dependency]) {
|
|
88
|
+
devDependencies[dependency] = rootDependencies[dependency];
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Write the updated package.json file
|
|
94
|
+
await writeFile(
|
|
95
|
+
fullPackageJsonPath,
|
|
96
|
+
JSON.stringify(packageJsonData, null, 2)
|
|
97
|
+
);
|
|
98
|
+
})
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Bumps the version of the package.json and jsr.json files in the current
|
|
104
|
+
* working directory.
|
|
105
|
+
* @param versionType The type of version bump (patch, minor, major).
|
|
106
|
+
*/
|
|
107
|
+
static async bumpVersion(
|
|
108
|
+
versionType: VersionType = VersionType.Patch
|
|
109
|
+
): Promise<void> {
|
|
110
|
+
const bump = (version: string): string => {
|
|
111
|
+
const [major, minor, patch] = version.split('.').map(Number);
|
|
112
|
+
switch (versionType) {
|
|
113
|
+
case VersionType.Major:
|
|
114
|
+
return `${major + 1}.0.0`;
|
|
115
|
+
case VersionType.Minor:
|
|
116
|
+
return `${major}.${minor + 1}.0`;
|
|
117
|
+
case VersionType.Patch:
|
|
118
|
+
default:
|
|
119
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const updateVersion = async (filePath: string): Promise<void> => {
|
|
124
|
+
try {
|
|
125
|
+
await access(filePath);
|
|
126
|
+
} catch {
|
|
127
|
+
Logger.info(
|
|
128
|
+
`No ${path.basename(filePath)} file found in the current directory.`
|
|
129
|
+
);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
try {
|
|
134
|
+
const fileData = JSON.parse(
|
|
135
|
+
await readFile(filePath, 'utf-8')
|
|
136
|
+
) as JsonWithVersionProperty;
|
|
137
|
+
const oldVersion = fileData.version;
|
|
138
|
+
const newVersion = bump(oldVersion);
|
|
139
|
+
fileData.version = newVersion;
|
|
140
|
+
await writeFile(filePath, JSON.stringify(fileData, null, 2));
|
|
141
|
+
Logger.info(
|
|
142
|
+
`Bumped ${path.basename(filePath)} from ${oldVersion} to ${newVersion}`
|
|
143
|
+
);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
const errorString = ErrorUtils.getErrorString(error);
|
|
146
|
+
Logger.error(
|
|
147
|
+
`Failed to update ${path.basename(filePath)}: ${errorString}`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const rootDir = process.cwd();
|
|
153
|
+
await updateVersion(path.join(rootDir, 'package.json'));
|
|
154
|
+
await updateVersion(path.join(rootDir, 'jsr.json'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -38,5 +38,12 @@ export default class FileSystemService {
|
|
|
38
38
|
* If absolute file paths are needed, use {@link getAllFilePaths}.
|
|
39
39
|
*/
|
|
40
40
|
static getAllFilePathsRelative(dirPath: string): Promise<string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Checks if there are any pending uncommitted changes in the git repository
|
|
43
|
+
* in the current working directory.
|
|
44
|
+
*
|
|
45
|
+
* @returns true if there are pending changes, false otherwise.
|
|
46
|
+
*/
|
|
47
|
+
static hasPendingChanges(): Promise<boolean>;
|
|
41
48
|
}
|
|
42
49
|
//# sourceMappingURL=FileSystemService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystemService.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"FileSystemService.d.ts","sourceRoot":"./src/","sources":["services/FileSystemService/FileSystemService.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;OAOG;WACU,iBAAiB,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;;;;OAMG;WACU,kBAAkB,CAC7B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC;WAmCH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAWtD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5D;;;;;;OAMG;WACU,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBhE;;;;;;OAMG;WACU,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOxE;;;;;OAKG;WACU,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;CAWnD"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const StringService_1 = __importDefault(require("../StringService"));
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { access, appendFile, cp, mkdir, readFile, readdir, rm, stat, writeFile } from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { promisify } from 'util';
|
|
5
|
+
import ErrorUtils from '../../utils/ErrorUtils.js';
|
|
6
|
+
import Logger from '../../utils/Logger.js';
|
|
7
|
+
import StringService from '../StringService.js';
|
|
8
|
+
const execAsync = promisify(exec);
|
|
10
9
|
/**
|
|
11
10
|
* A service which can be used to interact with the file system, only in build
|
|
12
11
|
* steps.
|
|
13
12
|
*/
|
|
14
|
-
class FileSystemService {
|
|
13
|
+
export default class FileSystemService {
|
|
15
14
|
/**
|
|
16
15
|
* Tries to add the provided snippet of text to the path provided. If the file
|
|
17
16
|
* doesn't exist, it creates it. If the folders to the file don't exist, it
|
|
@@ -21,22 +20,22 @@ class FileSystemService {
|
|
|
21
20
|
* be updated
|
|
22
21
|
*/
|
|
23
22
|
static async findAndInsertText(folderPath, fileName, textToInsert) {
|
|
24
|
-
const filePath =
|
|
23
|
+
const filePath = path.join(folderPath, fileName);
|
|
25
24
|
await FileSystemService.checkOrCreateFolder(folderPath);
|
|
26
25
|
try {
|
|
27
|
-
await
|
|
28
|
-
const fileContents = await
|
|
26
|
+
await access(filePath);
|
|
27
|
+
const fileContents = await readFile(filePath);
|
|
29
28
|
if (!fileContents.includes(textToInsert)) {
|
|
30
|
-
await
|
|
31
|
-
|
|
29
|
+
await appendFile(filePath, `\n${textToInsert}`);
|
|
30
|
+
Logger.info(`Added "${textToInsert}" to "${filePath}"`);
|
|
32
31
|
}
|
|
33
32
|
else {
|
|
34
|
-
|
|
33
|
+
Logger.info(`"${textToInsert}" already exists in "${filePath}"`);
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
catch {
|
|
38
|
-
|
|
39
|
-
await
|
|
37
|
+
Logger.info(`File at "${filePath}" didn't exist. Creating it now and adding "${textToInsert}" to it.`);
|
|
38
|
+
await writeFile(filePath, textToInsert);
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
/**
|
|
@@ -49,10 +48,10 @@ class FileSystemService {
|
|
|
49
48
|
static async copyFolderContents(sourceFolderPath, targetFolderPath, ignoreExtensions) {
|
|
50
49
|
// Check if the source directory exists first
|
|
51
50
|
try {
|
|
52
|
-
await
|
|
51
|
+
await access(sourceFolderPath);
|
|
53
52
|
}
|
|
54
53
|
catch {
|
|
55
|
-
|
|
54
|
+
Logger.error(`Source directory "${sourceFolderPath}" does not exist.`);
|
|
56
55
|
return;
|
|
57
56
|
}
|
|
58
57
|
await FileSystemService.checkOrCreateFolder(targetFolderPath);
|
|
@@ -60,34 +59,34 @@ class FileSystemService {
|
|
|
60
59
|
const sourceFilePaths = await FileSystemService.getAllFilePathsRelative(sourceFolderPath);
|
|
61
60
|
// console.log(sourceFilePaths);
|
|
62
61
|
await Promise.all(sourceFilePaths.map(async (sourceFilePath) => {
|
|
63
|
-
const sourceFile =
|
|
64
|
-
const targetFile =
|
|
65
|
-
const sourceFileExtension =
|
|
62
|
+
const sourceFile = path.join(sourceFolderPath, sourceFilePath);
|
|
63
|
+
const targetFile = path.join(targetFolderPath, sourceFilePath);
|
|
64
|
+
const sourceFileExtension = StringService.getFileNameExtension(sourceFile);
|
|
66
65
|
if (sourceFileExtension &&
|
|
67
66
|
ignoreExtensions?.includes(sourceFileExtension)) {
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
|
-
await
|
|
69
|
+
await cp(sourceFile, targetFile, { recursive: true });
|
|
71
70
|
}));
|
|
72
71
|
}
|
|
73
72
|
static async checkOrCreateFolder(folderPath) {
|
|
74
73
|
try {
|
|
75
|
-
await
|
|
74
|
+
await access(folderPath);
|
|
76
75
|
}
|
|
77
76
|
catch {
|
|
78
|
-
|
|
79
|
-
await
|
|
77
|
+
Logger.verbose.info(`Directory "${folderPath}" does not exist. Creating it now...`);
|
|
78
|
+
await mkdir(folderPath, { recursive: true });
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
static async deleteFolder(folderPath) {
|
|
83
82
|
try {
|
|
84
|
-
await
|
|
83
|
+
await access(folderPath);
|
|
85
84
|
}
|
|
86
85
|
catch {
|
|
87
|
-
|
|
86
|
+
Logger.error(`Directory "${folderPath}" does not exist.`);
|
|
88
87
|
return;
|
|
89
88
|
}
|
|
90
|
-
await
|
|
89
|
+
await rm(folderPath, { recursive: true });
|
|
91
90
|
}
|
|
92
91
|
/**
|
|
93
92
|
* Gets all the file paths in the directory provided, including all
|
|
@@ -98,10 +97,10 @@ class FileSystemService {
|
|
|
98
97
|
*/
|
|
99
98
|
static async getAllFilePaths(dirPath) {
|
|
100
99
|
const filePaths = [];
|
|
101
|
-
const fileOrFolderNames = await
|
|
100
|
+
const fileOrFolderNames = await readdir(dirPath);
|
|
102
101
|
await Promise.all(fileOrFolderNames.map(async (fileOrFolder) => {
|
|
103
|
-
const absolutePath =
|
|
104
|
-
const fileStat = await
|
|
102
|
+
const absolutePath = path.join(dirPath, fileOrFolder);
|
|
103
|
+
const fileStat = await stat(absolutePath);
|
|
105
104
|
if (fileStat.isDirectory()) {
|
|
106
105
|
filePaths.push(...(await this.getAllFilePaths(absolutePath)));
|
|
107
106
|
}
|
|
@@ -124,5 +123,21 @@ class FileSystemService {
|
|
|
124
123
|
return filePath.replace(dirPath, '');
|
|
125
124
|
});
|
|
126
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Checks if there are any pending uncommitted changes in the git repository
|
|
128
|
+
* in the current working directory.
|
|
129
|
+
*
|
|
130
|
+
* @returns true if there are pending changes, false otherwise.
|
|
131
|
+
*/
|
|
132
|
+
static async hasPendingChanges() {
|
|
133
|
+
try {
|
|
134
|
+
const { stdout } = await execAsync('git status --porcelain');
|
|
135
|
+
return stdout.trim().length > 0;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
Logger.error(`Failed to check for pending changes: ${ErrorUtils.getErrorString(error)}`);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
127
142
|
}
|
|
128
|
-
|
|
143
|
+
//# sourceMappingURL=FileSystemService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemService.js","sourceRoot":"./src/","sources":["services/FileSystemService/FileSystemService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { writeFile } from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import FileSystemService from './FileSystemService.js';
|
|
4
|
+
|
|
5
|
+
const TEST_FOLDER_NAME = '__fileSystemService-tests__';
|
|
6
|
+
|
|
7
|
+
describe('FileSystemService', () => {
|
|
8
|
+
afterAll(async () => {
|
|
9
|
+
await deleteTestFolder();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
describe('copyFolderContents', () => {
|
|
13
|
+
it('should successfully copy all contents when target folder doesnt exist', async () => {
|
|
14
|
+
// Make a test folder with a folder and a couple files in it
|
|
15
|
+
const testName = 'copyFolderContents-1';
|
|
16
|
+
const sourceFolderName = `${testName}-source`;
|
|
17
|
+
const sourceFolderPath = await createTestFolder(sourceFolderName);
|
|
18
|
+
await createTestFiles(sourceFolderPath, {
|
|
19
|
+
'file1.txt': 'test text',
|
|
20
|
+
'file2.txt': 'test text',
|
|
21
|
+
subFolder: {
|
|
22
|
+
'subFile1.txt': 'sub test text',
|
|
23
|
+
'subFile2.txt': 'sub test text'
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const targetFolderPath = path.join(
|
|
28
|
+
TEST_FOLDER_NAME,
|
|
29
|
+
`${testName}-target`
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
// Execute
|
|
33
|
+
await FileSystemService.copyFolderContents(
|
|
34
|
+
sourceFolderPath,
|
|
35
|
+
targetFolderPath
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Assert
|
|
39
|
+
const expectedContents =
|
|
40
|
+
await FileSystemService.getAllFilePathsRelative(sourceFolderPath);
|
|
41
|
+
const actualContents =
|
|
42
|
+
await FileSystemService.getAllFilePathsRelative(targetFolderPath);
|
|
43
|
+
expect(actualContents).toEqual(expectedContents);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should successfully copy only files that arent ignored', async () => {
|
|
47
|
+
// Make a test folder with a folder and a couple files in it
|
|
48
|
+
const testName = 'copyFolderContents-2';
|
|
49
|
+
const sourceFolderName = `${testName}-source`;
|
|
50
|
+
const sourceFolderPath = await createTestFolder(sourceFolderName);
|
|
51
|
+
await createTestFiles(sourceFolderPath, {
|
|
52
|
+
'file1.txt': 'test text',
|
|
53
|
+
'file2.txt': 'test text',
|
|
54
|
+
subFolder: {
|
|
55
|
+
'subFile1.txt': 'sub test text',
|
|
56
|
+
'subFile2.txt': 'sub test text'
|
|
57
|
+
},
|
|
58
|
+
javascript: {
|
|
59
|
+
'file1.js': 'test text',
|
|
60
|
+
'file2.js': 'test text'
|
|
61
|
+
},
|
|
62
|
+
typescript: {
|
|
63
|
+
'file1.ts': 'test text',
|
|
64
|
+
'file2.ts': 'test text'
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const targetFolderPath = path.join(
|
|
69
|
+
TEST_FOLDER_NAME,
|
|
70
|
+
`${testName}-target`
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// Execute
|
|
74
|
+
await FileSystemService.copyFolderContents(
|
|
75
|
+
sourceFolderPath,
|
|
76
|
+
targetFolderPath,
|
|
77
|
+
['ts']
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// Assert
|
|
81
|
+
const expectedContents = (
|
|
82
|
+
await FileSystemService.getAllFilePathsRelative(sourceFolderPath)
|
|
83
|
+
)
|
|
84
|
+
.filter((sourceFilePath) => !sourceFilePath.endsWith('.ts'))
|
|
85
|
+
.sort();
|
|
86
|
+
const actualContents = (
|
|
87
|
+
await FileSystemService.getAllFilePathsRelative(targetFolderPath)
|
|
88
|
+
).sort();
|
|
89
|
+
expect(actualContents).toEqual(expectedContents);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
async function createTestFiles(folderPath: string, fileStructure: object) {
|
|
95
|
+
await FileSystemService.checkOrCreateFolder(folderPath);
|
|
96
|
+
|
|
97
|
+
await Promise.all(
|
|
98
|
+
Object.entries(fileStructure).map(async ([key, value]) => {
|
|
99
|
+
if (typeof value === 'string') {
|
|
100
|
+
await writeFile(path.join(folderPath, key), value);
|
|
101
|
+
} else if (typeof value === 'object') {
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
103
|
+
await createTestFiles(path.join(folderPath, key), value);
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async function createTestFolder(folderName: string): Promise<string> {
|
|
110
|
+
const testFolderPath = path.join(TEST_FOLDER_NAME, folderName);
|
|
111
|
+
await FileSystemService.checkOrCreateFolder(testFolderPath);
|
|
112
|
+
return testFolderPath;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async function deleteTestFolder(): Promise<void> {
|
|
116
|
+
await FileSystemService.deleteFolder(TEST_FOLDER_NAME);
|
|
117
|
+
}
|