@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(): Promise<void>;
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;WAenC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAe1C;;;OAGG;WACU,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDtD;;;;;;OAMG;mBACkB,wCAAwC;IA+C7D;;;OAGG;mBACkB,gBAAgB;IAmBrC;;;;OAIG;mBACkB,UAAU;mBAkBV,gBAAgB;CAUtC"}
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 and package.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 made to jsr.json and package.json: ${ErrorUtils.getErrorString(error)}`);
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":"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"}
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('Reverting changes made to jsr.json and package.json');
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 made to jsr.json and package.json: ${ErrorUtils.getErrorString(error)}`
327
+ `Failed to revert changes: ${ErrorUtils.getErrorString(error)}`
214
328
  );
215
329
  }
216
330
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@aneuhold/core-ts-lib",
3
3
  "author": "Anton G. Neuhold Jr.",
4
4
  "license": "MIT",
5
- "version": "2.1.7",
5
+ "version": "2.1.9",
6
6
  "description": "A core library for all of my TypeScript projects",
7
7
  "type": "module",
8
8
  "scripts": {