progmaskinen 1.0.0-beta.1 → 1.0.0
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/lib/installer.mjs +46 -5
- package/package.json +1 -1
package/lib/installer.mjs
CHANGED
|
@@ -84,14 +84,37 @@ const HJAELP = `Progmaskinen: henter og installerer Progmaskinen.
|
|
|
84
84
|
npx progmaskinen --prerelease tag også forhåndsudgivelser (kun til test)
|
|
85
85
|
`;
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Smider alt, der allerede ligger i stdin (fx et linjeskift fra npx' "Ok to proceed? (y)"), før et spørgsmål stilles,
|
|
89
|
+
* så spørgsmålet altid venter på en linje, brugeren skriver efter at have set det.
|
|
90
|
+
*/
|
|
91
|
+
function tomStdin(stdin, ms = 200) {
|
|
92
|
+
return new Promise((ok) => {
|
|
93
|
+
const kast = () => {};
|
|
94
|
+
stdin.on('data', kast);
|
|
95
|
+
stdin.resume();
|
|
96
|
+
setTimeout(() => {
|
|
97
|
+
stdin.off('data', kast);
|
|
98
|
+
stdin.pause();
|
|
99
|
+
ok();
|
|
100
|
+
}, ms);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async function spoerg(stdin, stdout, tekst) {
|
|
105
|
+
if (stdin.isTTY) await tomStdin(stdin);
|
|
88
106
|
return new Promise((ok) => {
|
|
89
107
|
const rl = createInterface({ input: stdin, output: stdout });
|
|
108
|
+
let svaret = false;
|
|
109
|
+
// Løftet løses først med svaret; rl.close() udløser 'close', som ellers ville løse det med '' først.
|
|
90
110
|
rl.question(tekst, (svar) => {
|
|
91
|
-
|
|
111
|
+
svaret = true;
|
|
92
112
|
ok(svar.trim());
|
|
113
|
+
rl.close();
|
|
114
|
+
});
|
|
115
|
+
rl.on('close', () => {
|
|
116
|
+
if (!svaret) ok(''); // stdin blev lukket (EOF) uden et svar
|
|
93
117
|
});
|
|
94
|
-
rl.on('close', () => ok(''));
|
|
95
118
|
});
|
|
96
119
|
}
|
|
97
120
|
|
|
@@ -207,8 +230,26 @@ export async function koer({ argv = [], env = process.env, stdin = process.stdin
|
|
|
207
230
|
let mappe;
|
|
208
231
|
if (valg.mappe) mappe = udvidSti(valg.mappe, env);
|
|
209
232
|
else if (stdin.isTTY && stdout.isTTY) {
|
|
210
|
-
|
|
211
|
-
|
|
233
|
+
let tekst = `Progmaskinen lægges i ${forslag}\nTryk Enter for at bruge den, eller skriv en anden mappe: `;
|
|
234
|
+
for (;;) {
|
|
235
|
+
const svar = await spoerg(stdin, stdout, tekst);
|
|
236
|
+
if (!svar) {
|
|
237
|
+
mappe = forslag;
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
const valgt = udvidSti(svar, env);
|
|
241
|
+
skriv(`Du har valgt: ${valgt}`);
|
|
242
|
+
if (valgt === forslag) {
|
|
243
|
+
mappe = valgt;
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
const ok = (await spoerg(stdin, stdout, 'Er det rigtigt? (j/n) ')).toLowerCase();
|
|
247
|
+
if (ok === 'j' || ok === 'ja') {
|
|
248
|
+
mappe = valgt;
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
tekst = 'Skriv den mappe, du vil bruge (eller tryk Enter for at bruge forslaget): ';
|
|
252
|
+
}
|
|
212
253
|
} else {
|
|
213
254
|
mappe = forslag;
|
|
214
255
|
skriv(`Progmaskinen lægges i ${mappe}.`);
|