@take-out/scripts 0.1.27 → 0.1.29

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@take-out/scripts",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
4
4
  "type": "module",
5
5
  "main": "./src/run.ts",
6
6
  "sideEffects": false,
@@ -30,11 +30,11 @@
30
30
  "dependencies": {
31
31
  "@clack/prompts": "^0.8.2",
32
32
  "@lydell/node-pty": "^1.2.0-beta.3",
33
- "@take-out/helpers": "0.1.27",
33
+ "@take-out/helpers": "0.1.29",
34
34
  "picocolors": "^1.1.1"
35
35
  },
36
36
  "peerDependencies": {
37
- "vxrn": "^1.6.16"
37
+ "vxrn": "^1.9.5"
38
38
  },
39
39
  "peerDependenciesMeta": {
40
40
  "vxrn": {
@@ -42,6 +42,6 @@
42
42
  }
43
43
  },
44
44
  "devDependencies": {
45
- "vxrn": "1.6.16"
45
+ "vxrn": "1.9.5"
46
46
  }
47
47
  }
package/src/cmd.ts CHANGED
@@ -26,6 +26,7 @@ export function setInterceptCmd(
26
26
 
27
27
  function createCmd(description: string) {
28
28
  let argsSpec: string | undefined
29
+ let envVars: Record<string, string> = {}
29
30
 
30
31
  function makeRun<S extends string>(spec: S): RunFn<S> {
31
32
  return async (fn) => {
@@ -50,6 +51,11 @@ function createCmd(description: string) {
50
51
  process.exit(0)
51
52
  }
52
53
 
54
+ // apply env vars before running
55
+ for (const [key, value] of Object.entries(envVars)) {
56
+ process.env[key] = value
57
+ }
58
+
53
59
  const [{ $ }, prompt, { run }, { args: parseArgs }, fs, path, os] =
54
60
  await Promise.all([
55
61
  import(`bun`),
@@ -68,10 +74,24 @@ function createCmd(description: string) {
68
74
  }
69
75
  }
70
76
 
77
+ function makeChainable<S extends string>(spec: S) {
78
+ return {
79
+ env(vars: Record<string, string>) {
80
+ Object.assign(envVars, vars)
81
+ return this
82
+ },
83
+ run: makeRun(spec),
84
+ }
85
+ }
86
+
71
87
  return {
88
+ env(vars: Record<string, string>) {
89
+ Object.assign(envVars, vars)
90
+ return this
91
+ },
72
92
  args<const S extends string>(spec: S) {
73
93
  argsSpec = spec
74
- return { run: makeRun(spec) }
94
+ return makeChainable(spec)
75
95
  },
76
96
  run: makeRun(`` as ``),
77
97
  }
@@ -5,6 +5,18 @@ import {
5
5
  type ProcessType,
6
6
  } from './run'
7
7
 
8
+ // reset terminal to sane state
9
+ function resetTerminal() {
10
+ try {
11
+ // restore cooked mode if we have a TTY
12
+ if (process.stdin.isTTY && process.stdin.setRawMode) {
13
+ process.stdin.setRawMode(false)
14
+ }
15
+ } catch {}
16
+ // reset ANSI attributes
17
+ process.stdout.write('\x1b[0m')
18
+ }
19
+
8
20
  type ExitCallback = (info: { signal: NodeJS.Signals | string }) => void | Promise<void>
9
21
 
10
22
  interface HandleProcessExitReturn {
@@ -128,6 +140,8 @@ export function handleProcessExit({
128
140
  }
129
141
 
130
142
  const sigintHandler = () => {
143
+ // restore terminal to sane state
144
+ resetTerminal()
131
145
  // immediately print newline and reset cursor for clean terminal
132
146
  process.stdout.write('\n')
133
147
  // reset terminal attributes