@aneuhold/core-ts-lib 2.1.7 → 2.1.9
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.
|
@@ -15,7 +15,7 @@ export default class PackageService {
|
|
|
15
15
|
* Updates the jsr.json file from the package.json file and resolves wildcard
|
|
16
16
|
* dependencies in package.json for JSR compatibility.
|
|
17
17
|
*/
|
|
18
|
-
static updateJsrFromPackageJson
|
|
18
|
+
private static updateJsrFromPackageJson;
|
|
19
19
|
/**
|
|
20
20
|
* Resolves wildcard dependencies in package.json by replacing them with actual
|
|
21
21
|
* version constraints (e.g., "*1.2.3") for JSR compatibility.
|
|
@@ -35,6 +35,19 @@ export default class PackageService {
|
|
|
35
35
|
* @returns true if the publish was successful, false otherwise.
|
|
36
36
|
*/
|
|
37
37
|
private static publishJsr;
|
|
38
|
+
/**
|
|
39
|
+
* Replaces imports of monorepo dependencies with npm: specifiers in all TypeScript files.
|
|
40
|
+
* This is needed for JSR compatibility when publishing packages that depend on other packages in the monorepo.
|
|
41
|
+
*
|
|
42
|
+
* This helps prevent the following error that comes up as of 5/26/2025:
|
|
43
|
+
*
|
|
44
|
+
* ```sh
|
|
45
|
+
* error: Failed to publish @aneuhold/be-ts-lib@2.0.67
|
|
46
|
+
* Caused by: Failed to publish @aneuhold/be-ts-lib at 2.0.67: failed to build module graph: Module not found "file:///src/services/@aneuhold/core-ts-lib".
|
|
47
|
+
* at file:///src/services/GitHubService.ts:1:20
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
private static replaceMonorepoImportsWithNpmSpecifiers;
|
|
38
51
|
private static revertGitChanges;
|
|
39
52
|
}
|
|
40
53
|
//# sourceMappingURL=PackageService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageService.d.ts","sourceRoot":"./src/","sources":["services/PackageService.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC;;;;;OAKG;WACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"PackageService.d.ts","sourceRoot":"./src/","sources":["services/PackageService.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC;;;;;OAKG;WACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;WAiBnC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB1C;;;OAGG;mBACkB,wBAAwB;IAgD7C;;;;;;OAMG;mBACkB,wCAAwC;IA+C7D;;;OAGG;mBACkB,gBAAgB;IAmBrC;;;;OAIG;mBACkB,UAAU;IAkB/B;;;;;;;;;;;OAWG;mBACkB,uCAAuC;mBAgGvC,gBAAgB;CAYtC"}
|
|
@@ -23,6 +23,7 @@ export default class PackageService {
|
|
|
23
23
|
DR.logger.error('Please commit or stash your changes before publishing.');
|
|
24
24
|
process.exit(1);
|
|
25
25
|
}
|
|
26
|
+
await PackageService.replaceMonorepoImportsWithNpmSpecifiers();
|
|
26
27
|
await PackageService.updateJsrFromPackageJson();
|
|
27
28
|
const successfulDryRun = await PackageService.publishJsrDryRun();
|
|
28
29
|
await PackageService.revertGitChanges();
|
|
@@ -38,6 +39,7 @@ export default class PackageService {
|
|
|
38
39
|
DR.logger.error('Please commit or stash your changes before publishing.');
|
|
39
40
|
process.exit(1);
|
|
40
41
|
}
|
|
42
|
+
await PackageService.replaceMonorepoImportsWithNpmSpecifiers();
|
|
41
43
|
await PackageService.updateJsrFromPackageJson();
|
|
42
44
|
const result = await PackageService.publishJsr();
|
|
43
45
|
await PackageService.revertGitChanges();
|
|
@@ -164,13 +166,95 @@ export default class PackageService {
|
|
|
164
166
|
});
|
|
165
167
|
});
|
|
166
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Replaces imports of monorepo dependencies with npm: specifiers in all TypeScript files.
|
|
171
|
+
* This is needed for JSR compatibility when publishing packages that depend on other packages in the monorepo.
|
|
172
|
+
*
|
|
173
|
+
* This helps prevent the following error that comes up as of 5/26/2025:
|
|
174
|
+
*
|
|
175
|
+
* ```sh
|
|
176
|
+
* error: Failed to publish @aneuhold/be-ts-lib@2.0.67
|
|
177
|
+
* Caused by: Failed to publish @aneuhold/be-ts-lib at 2.0.67: failed to build module graph: Module not found "file:///src/services/@aneuhold/core-ts-lib".
|
|
178
|
+
* at file:///src/services/GitHubService.ts:1:20
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
static async replaceMonorepoImportsWithNpmSpecifiers() {
|
|
182
|
+
const rootDir = process.cwd();
|
|
183
|
+
const srcDir = path.join(rootDir, 'src');
|
|
184
|
+
try {
|
|
185
|
+
await access(srcDir);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
DR.logger.error('No src directory found in the current directory.');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Get all packages in the monorepo to know which ones to replace
|
|
192
|
+
const childPackages = await DependencyService.getChildPackageJsons('../');
|
|
193
|
+
const packageNames = Object.keys(childPackages);
|
|
194
|
+
if (packageNames.length === 0) {
|
|
195
|
+
DR.logger.info('No monorepo packages found to replace.');
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// Create a map of package names to their npm specifiers with version constraints
|
|
199
|
+
const packageSpecifierMap = new Map();
|
|
200
|
+
for (const [packageName, packageInfo] of Object.entries(childPackages)) {
|
|
201
|
+
const version = packageInfo.packageJsonContents.version;
|
|
202
|
+
// The below HAS to be a carrot (^) to ensure that the version is compatible with JSR.
|
|
203
|
+
// As of 5/26/2025, inline imports with versions don't seem to support the *
|
|
204
|
+
// wildcard, so we use a caret (^) to allow for minor version updates. This
|
|
205
|
+
// can cause problems, but it is accepted for now.
|
|
206
|
+
// Here is an example error that comes up if we don't use a caret:
|
|
207
|
+
// ```sh
|
|
208
|
+
// error: Invalid package specifier 'npm:@aneuhold/core-ts-lib@*2.1.7'
|
|
209
|
+
// 0: Invalid specifier version requirement
|
|
210
|
+
// 1: Unexpected character.
|
|
211
|
+
// 2.1.7
|
|
212
|
+
// ~
|
|
213
|
+
// at file:///Users/aneuhold/Development/GithubRepos/ts-libs/packages/be-ts-lib/src/services/ConfigService/ConfigService.ts:1:20
|
|
214
|
+
// ```
|
|
215
|
+
packageSpecifierMap.set(packageName, `npm:${packageName}@^${version}`);
|
|
216
|
+
}
|
|
217
|
+
// Get all TypeScript files in the src directory
|
|
218
|
+
const allFiles = await FileSystemService.getAllFilePathsRelative(srcDir);
|
|
219
|
+
const tsFiles = allFiles
|
|
220
|
+
.filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.spec.ts'))
|
|
221
|
+
.map((filePath) => path.join(srcDir, filePath));
|
|
222
|
+
DR.logger.info(`Replacing monorepo imports with npm: specifiers in ${tsFiles.length} TypeScript files...`);
|
|
223
|
+
let totalReplacements = 0;
|
|
224
|
+
for (const filePath of tsFiles) {
|
|
225
|
+
try {
|
|
226
|
+
const content = await readFile(filePath, 'utf-8');
|
|
227
|
+
let newContent = content;
|
|
228
|
+
let fileReplacements = 0;
|
|
229
|
+
for (const [packageName, npmSpecifier] of packageSpecifierMap) {
|
|
230
|
+
// Use a more precise regex to match import statements
|
|
231
|
+
const importRegex = new RegExp(`(import\\s+[^;]+from\\s+['"])${packageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(['"])`, 'g');
|
|
232
|
+
const matches = newContent.match(importRegex);
|
|
233
|
+
if (matches) {
|
|
234
|
+
newContent = newContent.replace(importRegex, `$1${npmSpecifier}$2`);
|
|
235
|
+
fileReplacements += matches.length;
|
|
236
|
+
DR.logger.info(` Replaced ${packageName} with ${npmSpecifier} (${matches.length} occurrences)`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (fileReplacements > 0) {
|
|
240
|
+
await writeFile(filePath, newContent);
|
|
241
|
+
totalReplacements += fileReplacements;
|
|
242
|
+
DR.logger.info(` Updated: ${path.relative(rootDir, filePath)} (${fileReplacements} replacements)`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
DR.logger.error(`Failed to process file ${filePath}: ${ErrorUtils.getErrorString(error)}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
DR.logger.info(`Completed monorepo import replacement: ${totalReplacements} total replacements made`);
|
|
250
|
+
}
|
|
167
251
|
static async revertGitChanges() {
|
|
168
|
-
DR.logger.info('Reverting changes made to jsr.json
|
|
252
|
+
DR.logger.info('Reverting changes made to jsr.json, package.json, and source files');
|
|
169
253
|
try {
|
|
170
|
-
await execAsync('git checkout jsr.json package.json');
|
|
254
|
+
await execAsync('git checkout -- jsr.json package.json src/');
|
|
171
255
|
}
|
|
172
256
|
catch (error) {
|
|
173
|
-
DR.logger.error(`Failed to revert changes
|
|
257
|
+
DR.logger.error(`Failed to revert changes: ${ErrorUtils.getErrorString(error)}`);
|
|
174
258
|
}
|
|
175
259
|
}
|
|
176
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageService.js","sourceRoot":"./src/","sources":["services/PackageService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AACvD,OAAO,iBAAiB,MAAM,0CAA0C,CAAC;AAEzE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAC7B,IAAI,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAChD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACjE,MAAM,cAAc,CAAC,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"PackageService.js","sourceRoot":"./src/","sources":["services/PackageService.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,9 +27,11 @@ export default class PackageService {
|
|
|
27
27
|
DR.logger.error('Please commit or stash your changes before publishing.');
|
|
28
28
|
process.exit(1);
|
|
29
29
|
}
|
|
30
|
+
await PackageService.replaceMonorepoImportsWithNpmSpecifiers();
|
|
30
31
|
await PackageService.updateJsrFromPackageJson();
|
|
31
32
|
const successfulDryRun = await PackageService.publishJsrDryRun();
|
|
32
33
|
await PackageService.revertGitChanges();
|
|
34
|
+
|
|
33
35
|
if (!successfulDryRun) {
|
|
34
36
|
process.exit(1);
|
|
35
37
|
} else {
|
|
@@ -42,9 +44,11 @@ export default class PackageService {
|
|
|
42
44
|
DR.logger.error('Please commit or stash your changes before publishing.');
|
|
43
45
|
process.exit(1);
|
|
44
46
|
}
|
|
47
|
+
await PackageService.replaceMonorepoImportsWithNpmSpecifiers();
|
|
45
48
|
await PackageService.updateJsrFromPackageJson();
|
|
46
49
|
const result = await PackageService.publishJsr();
|
|
47
50
|
await PackageService.revertGitChanges();
|
|
51
|
+
|
|
48
52
|
if (!result) {
|
|
49
53
|
process.exit(1);
|
|
50
54
|
} else {
|
|
@@ -56,7 +60,7 @@ export default class PackageService {
|
|
|
56
60
|
* Updates the jsr.json file from the package.json file and resolves wildcard
|
|
57
61
|
* dependencies in package.json for JSR compatibility.
|
|
58
62
|
*/
|
|
59
|
-
static async updateJsrFromPackageJson(): Promise<void> {
|
|
63
|
+
private static async updateJsrFromPackageJson(): Promise<void> {
|
|
60
64
|
const rootDir = process.cwd();
|
|
61
65
|
const packageJsonPath = path.join(rootDir, 'package.json');
|
|
62
66
|
const jsrJsonPath = path.join(rootDir, 'jsr.json');
|
|
@@ -204,13 +208,123 @@ export default class PackageService {
|
|
|
204
208
|
});
|
|
205
209
|
}
|
|
206
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Replaces imports of monorepo dependencies with npm: specifiers in all TypeScript files.
|
|
213
|
+
* This is needed for JSR compatibility when publishing packages that depend on other packages in the monorepo.
|
|
214
|
+
*
|
|
215
|
+
* This helps prevent the following error that comes up as of 5/26/2025:
|
|
216
|
+
*
|
|
217
|
+
* ```sh
|
|
218
|
+
* error: Failed to publish @aneuhold/be-ts-lib@2.0.67
|
|
219
|
+
* Caused by: Failed to publish @aneuhold/be-ts-lib at 2.0.67: failed to build module graph: Module not found "file:///src/services/@aneuhold/core-ts-lib".
|
|
220
|
+
* at file:///src/services/GitHubService.ts:1:20
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
private static async replaceMonorepoImportsWithNpmSpecifiers(): Promise<void> {
|
|
224
|
+
const rootDir = process.cwd();
|
|
225
|
+
const srcDir = path.join(rootDir, 'src');
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
await access(srcDir);
|
|
229
|
+
} catch {
|
|
230
|
+
DR.logger.error('No src directory found in the current directory.');
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Get all packages in the monorepo to know which ones to replace
|
|
235
|
+
const childPackages = await DependencyService.getChildPackageJsons('../');
|
|
236
|
+
const packageNames = Object.keys(childPackages);
|
|
237
|
+
|
|
238
|
+
if (packageNames.length === 0) {
|
|
239
|
+
DR.logger.info('No monorepo packages found to replace.');
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Create a map of package names to their npm specifiers with version constraints
|
|
244
|
+
const packageSpecifierMap = new Map<string, string>();
|
|
245
|
+
for (const [packageName, packageInfo] of Object.entries(childPackages)) {
|
|
246
|
+
const version = packageInfo.packageJsonContents.version;
|
|
247
|
+
// The below HAS to be a carrot (^) to ensure that the version is compatible with JSR.
|
|
248
|
+
// As of 5/26/2025, inline imports with versions don't seem to support the *
|
|
249
|
+
// wildcard, so we use a caret (^) to allow for minor version updates. This
|
|
250
|
+
// can cause problems, but it is accepted for now.
|
|
251
|
+
// Here is an example error that comes up if we don't use a caret:
|
|
252
|
+
// ```sh
|
|
253
|
+
// error: Invalid package specifier 'npm:@aneuhold/core-ts-lib@*2.1.7'
|
|
254
|
+
// 0: Invalid specifier version requirement
|
|
255
|
+
// 1: Unexpected character.
|
|
256
|
+
// 2.1.7
|
|
257
|
+
// ~
|
|
258
|
+
// at file:///Users/aneuhold/Development/GithubRepos/ts-libs/packages/be-ts-lib/src/services/ConfigService/ConfigService.ts:1:20
|
|
259
|
+
// ```
|
|
260
|
+
packageSpecifierMap.set(packageName, `npm:${packageName}@^${version}`);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Get all TypeScript files in the src directory
|
|
264
|
+
const allFiles = await FileSystemService.getAllFilePathsRelative(srcDir);
|
|
265
|
+
const tsFiles = allFiles
|
|
266
|
+
.filter(
|
|
267
|
+
(filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.spec.ts')
|
|
268
|
+
)
|
|
269
|
+
.map((filePath) => path.join(srcDir, filePath));
|
|
270
|
+
|
|
271
|
+
DR.logger.info(
|
|
272
|
+
`Replacing monorepo imports with npm: specifiers in ${tsFiles.length} TypeScript files...`
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
let totalReplacements = 0;
|
|
276
|
+
|
|
277
|
+
for (const filePath of tsFiles) {
|
|
278
|
+
try {
|
|
279
|
+
const content = await readFile(filePath, 'utf-8');
|
|
280
|
+
let newContent = content;
|
|
281
|
+
let fileReplacements = 0;
|
|
282
|
+
|
|
283
|
+
for (const [packageName, npmSpecifier] of packageSpecifierMap) {
|
|
284
|
+
// Use a more precise regex to match import statements
|
|
285
|
+
const importRegex = new RegExp(
|
|
286
|
+
`(import\\s+[^;]+from\\s+['"])${packageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(['"])`,
|
|
287
|
+
'g'
|
|
288
|
+
);
|
|
289
|
+
const matches = newContent.match(importRegex);
|
|
290
|
+
|
|
291
|
+
if (matches) {
|
|
292
|
+
newContent = newContent.replace(importRegex, `$1${npmSpecifier}$2`);
|
|
293
|
+
fileReplacements += matches.length;
|
|
294
|
+
DR.logger.info(
|
|
295
|
+
` Replaced ${packageName} with ${npmSpecifier} (${matches.length} occurrences)`
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (fileReplacements > 0) {
|
|
301
|
+
await writeFile(filePath, newContent);
|
|
302
|
+
totalReplacements += fileReplacements;
|
|
303
|
+
DR.logger.info(
|
|
304
|
+
` Updated: ${path.relative(rootDir, filePath)} (${fileReplacements} replacements)`
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
} catch (error) {
|
|
308
|
+
DR.logger.error(
|
|
309
|
+
`Failed to process file ${filePath}: ${ErrorUtils.getErrorString(error)}`
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
DR.logger.info(
|
|
315
|
+
`Completed monorepo import replacement: ${totalReplacements} total replacements made`
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
|
|
207
319
|
private static async revertGitChanges(): Promise<void> {
|
|
208
|
-
DR.logger.info(
|
|
320
|
+
DR.logger.info(
|
|
321
|
+
'Reverting changes made to jsr.json, package.json, and source files'
|
|
322
|
+
);
|
|
209
323
|
try {
|
|
210
|
-
await execAsync('git checkout jsr.json package.json');
|
|
324
|
+
await execAsync('git checkout -- jsr.json package.json src/');
|
|
211
325
|
} catch (error) {
|
|
212
326
|
DR.logger.error(
|
|
213
|
-
`Failed to revert changes
|
|
327
|
+
`Failed to revert changes: ${ErrorUtils.getErrorString(error)}`
|
|
214
328
|
);
|
|
215
329
|
}
|
|
216
330
|
}
|