@@ -29,6 +29,8 @@ import { installDeps, parseDeps } from './deps.js'
29
29
import { randomId } from './util.js'
30
30
import { createRequire } from './vendor.js'
31
31
32
+ const EXT = '.mjs'
33
+
32
34
isMain ( ) &&
33
35
main ( ) . catch ( ( err ) => {
34
36
if ( err instanceof ProcessOutput ) {
@@ -56,6 +58,7 @@ export function printUsage() {
56
58
--postfix=<command> postfix all commands
57
59
--cwd=<path> set current directory
58
60
--eval=<js>, -e evaluate script
61
+ --ext=<.mjs> default extension
59
62
--install, -i install dependencies
60
63
--version, -v print current zx version
61
64
--help, -h print help
@@ -67,7 +70,7 @@ export function printUsage() {
67
70
}
68
71
69
72
export const argv = minimist ( process . argv . slice ( 2 ) , {
70
- string : [ 'shell' , 'prefix' , 'postfix' , 'eval' , 'cwd' ] ,
73
+ string : [ 'shell' , 'prefix' , 'postfix' , 'eval' , 'cwd' , 'ext' ] ,
71
74
boolean : [
72
75
'version' ,
73
76
'help' ,
@@ -83,6 +86,7 @@ export const argv = minimist(process.argv.slice(2), {
83
86
84
87
export async function main ( ) {
85
88
await import ( './globals.js' )
89
+ argv . ext = normalizeExt ( argv . ext )
86
90
if ( argv . cwd ) $ . cwd = argv . cwd
87
91
if ( argv . verbose ) $ . verbose = true
88
92
if ( argv . quiet ) $ . quiet = true
@@ -102,21 +106,21 @@ export async function main() {
102
106
return
103
107
}
104
108
if ( argv . eval ) {
105
- await runScript ( argv . eval )
109
+ await runScript ( argv . eval , argv . ext )
106
110
return
107
111
}
108
112
const firstArg = argv . _ [ 0 ]
109
113
updateArgv ( argv . _ . slice ( firstArg === undefined ? 0 : 1 ) )
110
114
if ( ! firstArg || firstArg === '-' ) {
111
- const success = await scriptFromStdin ( )
115
+ const success = await scriptFromStdin ( argv . ext )
112
116
if ( ! success ) {
113
117
printUsage ( )
114
118
process . exitCode = 1
115
119
}
116
120
return
117
121
}
118
122
if ( / ^ h t t p s ? : / . test ( firstArg ) ) {
119
- await scriptFromHttp ( firstArg )
123
+ await scriptFromHttp ( firstArg , argv . ext )
120
124
return
121
125
}
122
126
const filepath = firstArg . startsWith ( 'file:///' )
@@ -125,12 +129,12 @@ export async function main() {
125
129
await importPath ( filepath )
126
130
}
127
131
128
- export async function runScript ( script : string ) {
129
- const filepath = path . join ( $ . cwd ?? process . cwd ( ) , `zx-${ randomId ( ) } .mjs ` )
132
+ export async function runScript ( script : string , ext = EXT ) {
133
+ const filepath = path . join ( $ . cwd ?? process . cwd ( ) , `zx-${ randomId ( ) } ${ ext } ` )
130
134
await writeAndImport ( script , filepath )
131
135
}
132
136
133
- export async function scriptFromStdin ( ) {
137
+ export async function scriptFromStdin ( ext ?: string ) {
134
138
let script = ''
135
139
if ( ! process . stdin . isTTY ) {
136
140
process . stdin . setEncoding ( 'utf8' )
@@ -139,14 +143,14 @@ export async function scriptFromStdin() {
139
143
}
140
144
141
145
if ( script . length > 0 ) {
142
- await runScript ( script )
146
+ await runScript ( script , ext )
143
147
return true
144
148
}
145
149
}
146
150
return false
147
151
}
148
152
149
- export async function scriptFromHttp ( remote : string ) {
153
+ export async function scriptFromHttp ( remote : string , _ext = EXT ) {
150
154
const res = await fetch ( remote )
151
155
if ( ! res . ok ) {
152
156
console . error ( `Error: Can't get ${ remote } ` )
@@ -155,7 +159,7 @@ export async function scriptFromHttp(remote: string) {
155
159
const script = await res . text ( )
156
160
const pathname = new URL ( remote ) . pathname
157
161
const name = path . basename ( pathname )
158
- const ext = path . extname ( pathname ) || '.mjs'
162
+ const ext = path . extname ( pathname ) || _ext
159
163
const cwd = $ . cwd ?? process . cwd ( )
160
164
const filepath = path . join ( cwd , `${ name } -${ randomId ( ) } ${ ext } ` )
161
165
await writeAndImport ( script , filepath )
@@ -299,3 +303,9 @@ export function isMain(
299
303
300
304
return false
301
305
}
306
+
307
+ export function normalizeExt ( ext ? : string ) {
308
+ if ( ! ext ) return
309
+ if ( ! / ^ \. ? \w + ( \. \w + ) * $ / . test ( ext ) ) throw new Error ( `Invalid extension ${ ext } ` )
310
+ return ext [ 0 ] === '.' ? ext : `.${ ext } `
311
+ }
0 commit comments