ts-repo-utils 7.3.0 → 7.3.1
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/README.md +38 -0
- package/dist/cmd/assert-repo-is-clean.mjs +1 -1
- package/dist/cmd/check-should-run-type-checks.mjs +1 -1
- package/dist/cmd/format-diff-from.mjs +1 -1
- package/dist/cmd/format-uncommitted.mjs +1 -1
- package/dist/cmd/gen-index-ts.mjs +1 -1
- package/dist/node-global.d.mts +2 -0
- package/dist/node-global.d.mts.map +1 -1
- package/package.json +1 -1
- package/src/cmd/assert-repo-is-clean.mts +1 -1
- package/src/cmd/check-should-run-type-checks.mts +1 -1
- package/src/cmd/format-diff-from.mts +1 -1
- package/src/cmd/format-uncommitted.mts +1 -1
- package/src/cmd/gen-index-ts.mts +1 -1
- package/src/node-global.mts +1 -1
package/README.md
CHANGED
|
@@ -236,6 +236,39 @@ type Ret = Promise<
|
|
|
236
236
|
|
|
237
237
|
### Script Execution Utilities
|
|
238
238
|
|
|
239
|
+
#### `isDirectlyExecuted(fileUrl: string): boolean`
|
|
240
|
+
|
|
241
|
+
Determines whether a script is being executed directly via CLI or imported as a module. This is useful for creating scripts that can both be imported as libraries and executed directly.
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
import { isDirectlyExecuted } from 'ts-repo-utils';
|
|
245
|
+
|
|
246
|
+
// or
|
|
247
|
+
// import "ts-repo-utils"; // isDirectlyExecuted is globally defined in ts-repo-utils
|
|
248
|
+
|
|
249
|
+
// calculator.mjs
|
|
250
|
+
export const add = (a: number, b: number): number => a + b;
|
|
251
|
+
export const multiply = (a: number, b: number): number => a * b;
|
|
252
|
+
|
|
253
|
+
// Only run main logic when executed directly: node calculator.mjs (or tsx calculator.mts)
|
|
254
|
+
// When imported elsewhere, only the functions are available
|
|
255
|
+
if (isDirectlyExecuted(import.meta.url)) {
|
|
256
|
+
console.log('Calculator CLI');
|
|
257
|
+
console.log('2 + 3 =', add(2, 3));
|
|
258
|
+
console.log('4 × 5 =', multiply(4, 5));
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
When executed directly (`node calculator.mjs`), it runs the main function and prints the results. When imported (`import { add } from './calculator.mjs'`), it only provides the functions without executing the main logic.
|
|
263
|
+
|
|
264
|
+
NOTE: If you use [tsx](https://www.npmjs.com/package/tsx) or [ts-node](https://www.npmjs.com/package/ts-node), run your scripts with the extension `.(m)ts` instead of `.(m)js` so that `isDirectlyExecuted` can correctly determine if the script is executed directly.
|
|
265
|
+
|
|
266
|
+
**Use Cases:**
|
|
267
|
+
|
|
268
|
+
- Creating CLI tools that can also be used as libraries
|
|
269
|
+
- Preventing automatic execution when a file is imported
|
|
270
|
+
- Running initialization code only during direct execution
|
|
271
|
+
|
|
239
272
|
### Path and File System Utilities
|
|
240
273
|
|
|
241
274
|
#### `pathExists(filePath: string): Promise<boolean>`
|
|
@@ -668,6 +701,10 @@ const configJson: string = await fs.readFile('./config.json', {
|
|
|
668
701
|
});
|
|
669
702
|
|
|
670
703
|
const files: readonly string[] = await glob('**/*.ts');
|
|
704
|
+
|
|
705
|
+
if (isDirectlyExecuted(import.meta.url)) {
|
|
706
|
+
echo('Running as CLI');
|
|
707
|
+
}
|
|
671
708
|
```
|
|
672
709
|
|
|
673
710
|
- `$` - The command execution utility described above.
|
|
@@ -675,6 +712,7 @@ const files: readonly string[] = await glob('**/*.ts');
|
|
|
675
712
|
- `path` - `node:path`
|
|
676
713
|
- `fs` - `node:fs/promises`
|
|
677
714
|
- `glob` - `fast-glob`
|
|
715
|
+
- `isDirectlyExecuted` - The script execution utility described above.
|
|
678
716
|
|
|
679
717
|
## Common Patterns
|
|
680
718
|
|
package/dist/node-global.d.mts
CHANGED
|
@@ -2,11 +2,13 @@ import { default as glob_ } from 'fast-glob';
|
|
|
2
2
|
import * as fs_ from 'node:fs/promises';
|
|
3
3
|
import * as path_ from 'node:path';
|
|
4
4
|
import { $ as $_ } from './functions/exec-async.mjs';
|
|
5
|
+
import { isDirectlyExecuted as isDirectlyExecuted_ } from './functions/is-directly-executed.mjs';
|
|
5
6
|
declare global {
|
|
6
7
|
const $: typeof $_;
|
|
7
8
|
const echo: typeof console.log;
|
|
8
9
|
const path: typeof path_;
|
|
9
10
|
const fs: typeof fs_;
|
|
10
11
|
const glob: typeof glob_;
|
|
12
|
+
const isDirectlyExecuted: typeof isDirectlyExecuted_;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=node-global.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-global.d.mts","sourceRoot":"","sources":["../src/node-global.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"node-global.d.mts","sourceRoot":"","sources":["../src/node-global.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAejG,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IAE/B,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC;IACrB,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,kBAAkB,EAAE,OAAO,mBAAmB,CAAC;CACtD"}
|
package/package.json
CHANGED
package/src/cmd/gen-index-ts.mts
CHANGED
package/src/node-global.mts
CHANGED