@qodalis/cli-yesno 2.0.0-beta.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/package.json +37 -0
- package/public-api.d.mts +25 -0
- package/public-api.d.ts +25 -0
- package/public-api.js +160 -0
- package/public-api.js.map +1 -0
- package/public-api.mjs +155 -0
- package/public-api.mjs.map +1 -0
- package/umd/cli-entrypoint.global.js +2829 -0
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@qodalis/cli-yesno",
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
|
+
"description": "@qodalis/cli extension for generating random yes/no answers with animations.",
|
|
5
|
+
"author": "Nicolae Lupei, Qodalis Solutions",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/qodalis-solutions/web-cli"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://qodalis.com",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"cli",
|
|
14
|
+
"qodalis",
|
|
15
|
+
"terminal",
|
|
16
|
+
"yesno",
|
|
17
|
+
"random",
|
|
18
|
+
"decision",
|
|
19
|
+
"fun"
|
|
20
|
+
],
|
|
21
|
+
"umd": "./umd/index.js",
|
|
22
|
+
"unpkg": "./umd/index.js",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@qodalis/cli-core": "2.0.0-beta.1"
|
|
25
|
+
},
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"main": "./public-api.js",
|
|
28
|
+
"module": "./public-api.mjs",
|
|
29
|
+
"types": "./public-api.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./public-api.d.ts",
|
|
33
|
+
"import": "./public-api.mjs",
|
|
34
|
+
"require": "./public-api.js"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
package/public-api.d.mts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as _qodalis_cli_core from '@qodalis/cli-core';
|
|
2
|
+
import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
3
|
+
|
|
4
|
+
declare class CliYesnoCommandProcessor implements ICliCommandProcessor {
|
|
5
|
+
command: string;
|
|
6
|
+
description: string;
|
|
7
|
+
acceptsRawInput: boolean;
|
|
8
|
+
author: _qodalis_cli_core.ICliCommandAuthor;
|
|
9
|
+
version: string;
|
|
10
|
+
metadata?: CliProcessorMetadata | undefined;
|
|
11
|
+
parameters?: ICliCommandParameterDescriptor[];
|
|
12
|
+
processors?: ICliCommandProcessor[] | undefined;
|
|
13
|
+
processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
|
|
14
|
+
writeDescription(context: ICliExecutionContext): void;
|
|
15
|
+
private runSlotMachine;
|
|
16
|
+
private drawBox;
|
|
17
|
+
private clearBox;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare const LIBRARY_VERSION = "2.0.0-beta.1";
|
|
21
|
+
declare const API_VERSION = 2;
|
|
22
|
+
|
|
23
|
+
declare const yesnoModule: ICliModule;
|
|
24
|
+
|
|
25
|
+
export { API_VERSION, CliYesnoCommandProcessor, LIBRARY_VERSION, yesnoModule };
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as _qodalis_cli_core from '@qodalis/cli-core';
|
|
2
|
+
import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
3
|
+
|
|
4
|
+
declare class CliYesnoCommandProcessor implements ICliCommandProcessor {
|
|
5
|
+
command: string;
|
|
6
|
+
description: string;
|
|
7
|
+
acceptsRawInput: boolean;
|
|
8
|
+
author: _qodalis_cli_core.ICliCommandAuthor;
|
|
9
|
+
version: string;
|
|
10
|
+
metadata?: CliProcessorMetadata | undefined;
|
|
11
|
+
parameters?: ICliCommandParameterDescriptor[];
|
|
12
|
+
processors?: ICliCommandProcessor[] | undefined;
|
|
13
|
+
processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
|
|
14
|
+
writeDescription(context: ICliExecutionContext): void;
|
|
15
|
+
private runSlotMachine;
|
|
16
|
+
private drawBox;
|
|
17
|
+
private clearBox;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare const LIBRARY_VERSION = "2.0.0-beta.1";
|
|
21
|
+
declare const API_VERSION = 2;
|
|
22
|
+
|
|
23
|
+
declare const yesnoModule: ICliModule;
|
|
24
|
+
|
|
25
|
+
export { API_VERSION, CliYesnoCommandProcessor, LIBRARY_VERSION, yesnoModule };
|
package/public-api.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var cliCore = require('@qodalis/cli-core');
|
|
4
|
+
|
|
5
|
+
// src/lib/processors/cli-yesno-command-processor.ts
|
|
6
|
+
|
|
7
|
+
// src/lib/version.ts
|
|
8
|
+
var LIBRARY_VERSION = "2.0.0-beta.1";
|
|
9
|
+
var API_VERSION = 2;
|
|
10
|
+
|
|
11
|
+
// src/lib/processors/cli-yesno-command-processor.ts
|
|
12
|
+
var RESET = "\x1B[0m";
|
|
13
|
+
var GREEN = "\x1B[38;5;82m";
|
|
14
|
+
var RED = "\x1B[38;5;196m";
|
|
15
|
+
var CYAN = "\x1B[38;5;45m";
|
|
16
|
+
var DIM = "\x1B[2m";
|
|
17
|
+
var BOLD = "\x1B[1m";
|
|
18
|
+
var GREEN_BG = "\x1B[48;5;22m";
|
|
19
|
+
var RED_BG = "\x1B[48;5;52m";
|
|
20
|
+
var CliYesnoCommandProcessor = class {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.command = "yesno";
|
|
23
|
+
this.description = "Generate a random yes/no answer with animation";
|
|
24
|
+
this.acceptsRawInput = true;
|
|
25
|
+
this.author = cliCore.DefaultLibraryAuthor;
|
|
26
|
+
this.version = LIBRARY_VERSION;
|
|
27
|
+
this.metadata = {
|
|
28
|
+
icon: "\u{1F3B0}"
|
|
29
|
+
};
|
|
30
|
+
this.parameters = [
|
|
31
|
+
{
|
|
32
|
+
name: "count",
|
|
33
|
+
aliases: ["n"],
|
|
34
|
+
description: "Number of rounds to run (default: 1)",
|
|
35
|
+
required: false,
|
|
36
|
+
type: "number",
|
|
37
|
+
defaultValue: "1"
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
this.processors = [];
|
|
41
|
+
}
|
|
42
|
+
async processCommand(command, context) {
|
|
43
|
+
const count = parseInt(command.args["count"] || command.args["n"]) || 1;
|
|
44
|
+
const question = command.value?.trim();
|
|
45
|
+
if (question) {
|
|
46
|
+
context.writer.writeln(
|
|
47
|
+
`${CYAN}?${RESET} ${BOLD}${question}${RESET}`
|
|
48
|
+
);
|
|
49
|
+
context.writer.writeln();
|
|
50
|
+
}
|
|
51
|
+
for (let i = 0; i < count; i++) {
|
|
52
|
+
if (i > 0) {
|
|
53
|
+
context.writer.writeln();
|
|
54
|
+
}
|
|
55
|
+
await this.runSlotMachine(context);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
writeDescription(context) {
|
|
59
|
+
const { writer } = context;
|
|
60
|
+
writer.writeln(this.description);
|
|
61
|
+
writer.writeln();
|
|
62
|
+
writer.writeln(
|
|
63
|
+
` ${writer.wrapInColor("yesno", cliCore.CliForegroundColor.Cyan)} Generate a random yes/no`
|
|
64
|
+
);
|
|
65
|
+
writer.writeln(
|
|
66
|
+
` ${writer.wrapInColor("yesno Should I deploy?", cliCore.CliForegroundColor.Cyan)} Ask a question`
|
|
67
|
+
);
|
|
68
|
+
writer.writeln(
|
|
69
|
+
` ${writer.wrapInColor("yesno --count=5", cliCore.CliForegroundColor.Cyan)} Run 5 rounds`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
runSlotMachine(context) {
|
|
73
|
+
return new Promise((resolve) => {
|
|
74
|
+
const result = Math.random() < 0.5;
|
|
75
|
+
const totalSteps = 20;
|
|
76
|
+
let step = 0;
|
|
77
|
+
let aborted = false;
|
|
78
|
+
const subscription = context.onAbort.subscribe(() => {
|
|
79
|
+
aborted = true;
|
|
80
|
+
subscription.unsubscribe();
|
|
81
|
+
this.clearBox(context);
|
|
82
|
+
context.writer.writeln(`${DIM}(cancelled)${RESET}`);
|
|
83
|
+
resolve();
|
|
84
|
+
});
|
|
85
|
+
const animate = () => {
|
|
86
|
+
if (aborted) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
this.clearBox(context);
|
|
90
|
+
const isLast = step === totalSteps;
|
|
91
|
+
const currentValue = isLast ? result : step % 2 === 0;
|
|
92
|
+
this.drawBox(context, currentValue, isLast);
|
|
93
|
+
step++;
|
|
94
|
+
if (step <= totalSteps) {
|
|
95
|
+
const baseDelay = 60;
|
|
96
|
+
const progress = step / totalSteps;
|
|
97
|
+
const delay = baseDelay + Math.pow(progress, 3) * 440;
|
|
98
|
+
setTimeout(animate, delay);
|
|
99
|
+
} else {
|
|
100
|
+
subscription.unsubscribe();
|
|
101
|
+
context.writer.writeln();
|
|
102
|
+
const label = result ? "YES" : "NO";
|
|
103
|
+
const color = result ? GREEN : RED;
|
|
104
|
+
context.writer.writeln(
|
|
105
|
+
` ${color}${BOLD}The answer is: ${label}${RESET}`
|
|
106
|
+
);
|
|
107
|
+
resolve();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
animate();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
drawBox(context, value, isFinal) {
|
|
114
|
+
const label = value ? " YES " : " NO ";
|
|
115
|
+
const color = isFinal ? value ? GREEN : RED : CYAN;
|
|
116
|
+
const bgColor = isFinal ? value ? GREEN_BG : RED_BG : "";
|
|
117
|
+
const border = isFinal ? color : DIM;
|
|
118
|
+
const top = ` ${border}+-----------+${RESET}`;
|
|
119
|
+
const mid = ` ${border}|${RESET} ${bgColor}${color}${BOLD} > ${label} < ${RESET} ${border}|${RESET}`;
|
|
120
|
+
const bot = ` ${border}+-----------+${RESET}`;
|
|
121
|
+
context.terminal.write(`${top}\r
|
|
122
|
+
${mid}\r
|
|
123
|
+
${bot}`);
|
|
124
|
+
}
|
|
125
|
+
clearBox(context) {
|
|
126
|
+
for (let i = 0; i < 3; i++) {
|
|
127
|
+
context.terminal.write("\x1B[2K");
|
|
128
|
+
if (i < 2) {
|
|
129
|
+
context.terminal.write("\x1B[A");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
context.terminal.write("\r");
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
// src/public-api.ts
|
|
137
|
+
var yesnoModule = {
|
|
138
|
+
apiVersion: API_VERSION,
|
|
139
|
+
name: "@qodalis/cli-yesno",
|
|
140
|
+
processors: [new CliYesnoCommandProcessor()],
|
|
141
|
+
translations: {
|
|
142
|
+
es: { "cli.yesno.description": "Generar una respuesta aleatoria de s\xED o no" },
|
|
143
|
+
fr: { "cli.yesno.description": "G\xE9n\xE9rer une r\xE9ponse al\xE9atoire oui/non" },
|
|
144
|
+
de: { "cli.yesno.description": "Zuf\xE4llige Ja/Nein-Antwort generieren" },
|
|
145
|
+
pt: { "cli.yesno.description": "Gerar uma resposta aleat\xF3ria de sim ou n\xE3o" },
|
|
146
|
+
it: { "cli.yesno.description": "Generare una risposta casuale s\xEC/no" },
|
|
147
|
+
ja: { "cli.yesno.description": "\u30E9\u30F3\u30C0\u30E0\u306B\u306F\u3044/\u3044\u3044\u3048\u3092\u751F\u6210" },
|
|
148
|
+
ko: { "cli.yesno.description": "\uBB34\uC791\uC704 \uC608/\uC544\uB2C8\uC624 \uB2F5\uBCC0 \uC0DD\uC131" },
|
|
149
|
+
zh: { "cli.yesno.description": "\u968F\u673A\u751F\u6210\u662F/\u5426\u7B54\u6848" },
|
|
150
|
+
ru: { "cli.yesno.description": "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0434\u0430/\u043D\u0435\u0442" },
|
|
151
|
+
ro: { "cli.yesno.description": "Genereaz\u0103 un r\u0103spuns aleatoriu da/nu" }
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
exports.API_VERSION = API_VERSION;
|
|
156
|
+
exports.CliYesnoCommandProcessor = CliYesnoCommandProcessor;
|
|
157
|
+
exports.LIBRARY_VERSION = LIBRARY_VERSION;
|
|
158
|
+
exports.yesnoModule = yesnoModule;
|
|
159
|
+
//# sourceMappingURL=public-api.js.map
|
|
160
|
+
//# sourceMappingURL=public-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/yesno/src/lib/version.ts","../../packages/plugins/yesno/src/lib/processors/cli-yesno-command-processor.ts","../../packages/plugins/yesno/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliForegroundColor"],"mappings":";;;;;;;AAEO,IAAM,eAAA,GAAkB;AACxB,IAAM,WAAA,GAAc;;;ACQ3B,IAAM,KAAA,GAAQ,SAAA;AACd,IAAM,KAAA,GAAQ,eAAA;AACd,IAAM,GAAA,GAAM,gBAAA;AACZ,IAAM,IAAA,GAAO,eAAA;AACb,IAAM,GAAA,GAAM,SAAA;AACZ,IAAM,IAAA,GAAO,SAAA;AACb,IAAM,QAAA,GAAW,eAAA;AACjB,IAAM,MAAA,GAAS,eAAA;AAER,IAAM,2BAAN,MAA+D;AAAA,EAA/D,WAAA,GAAA;AACH,IAAA,IAAA,CAAA,OAAA,GAAU,OAAA;AAEV,IAAA,IAAA,CAAA,WAAA,GAAc,gDAAA;AAEd,IAAA,IAAA,CAAA,eAAA,GAAkB,IAAA;AAElB,IAAA,IAAA,CAAA,MAAA,GAASA,4BAAA;AAET,IAAA,IAAA,CAAA,OAAA,GAAU,eAAA;AAEV,IAAA,IAAA,CAAA,QAAA,GAA8C;AAAA,MAC1C,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,IAAA,CAAA,UAAA,GAAgD;AAAA,MAC5C;AAAA,QACI,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,CAAC,GAAG,CAAA;AAAA,QACb,WAAA,EAAa,sCAAA;AAAA,QACb,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,YAAA,EAAc;AAAA;AAClB,KACJ;AAEA,IAAA,IAAA,CAAA,UAAA,GAAkD,EAAC;AAAA,EAAA;AAAA,EAEnD,MAAM,cAAA,CACF,OAAA,EACA,OAAA,EACa;AACb,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,OAAO,KAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,IAAK,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK;AAErC,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,OAAA,CAAQ,MAAA,CAAO,OAAA;AAAA,QACX,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,EAAG,QAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,OAC/C;AACA,MAAA,OAAA,CAAQ,OAAO,OAAA,EAAQ;AAAA,IAC3B;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC5B,MAAA,IAAI,IAAI,CAAA,EAAG;AACP,QAAA,OAAA,CAAQ,OAAO,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,MAAM,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,iBAAiB,OAAA,EAAqC;AAClD,IAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AACnB,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,WAAW,CAAA;AAC/B,IAAA,MAAA,CAAO,OAAA,EAAQ;AACf,IAAA,MAAA,CAAO,OAAA;AAAA,MACH,KAAK,MAAA,CAAO,WAAA,CAAY,OAAA,EAASC,0BAAA,CAAmB,IAAI,CAAC,CAAA,kDAAA;AAAA,KAC7D;AACA,IAAA,MAAA,CAAO,OAAA;AAAA,MACH,KAAK,MAAA,CAAO,WAAA,CAAY,wBAAA,EAA0BA,0BAAA,CAAmB,IAAI,CAAC,CAAA,oBAAA;AAAA,KAC9E;AACA,IAAA,MAAA,CAAO,OAAA;AAAA,MACH,KAAK,MAAA,CAAO,WAAA,CAAY,iBAAA,EAAmBA,0BAAA,CAAmB,IAAI,CAAC,CAAA,2BAAA;AAAA,KACvE;AAAA,EACJ;AAAA,EAEQ,eAAe,OAAA,EAA8C;AACjE,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAClC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AAC/B,MAAA,MAAM,UAAA,GAAa,EAAA;AACnB,MAAA,IAAI,IAAA,GAAO,CAAA;AACX,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,MAAM;AACjD,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,YAAA,CAAa,WAAA,EAAY;AACzB,QAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AACrB,QAAA,OAAA,CAAQ,OAAO,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA;AAClD,QAAA,OAAA,EAAQ;AAAA,MACZ,CAAC,CAAA;AAED,MAAA,MAAM,UAAU,MAAM;AAClB,QAAA,IAAI,OAAA,EAAS;AACT,UAAA;AAAA,QACJ;AAEA,QAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AAErB,QAAA,MAAM,SAAS,IAAA,KAAS,UAAA;AACxB,QAAA,MAAM,YAAA,GAAe,MAAA,GAAS,MAAA,GAAS,IAAA,GAAO,CAAA,KAAM,CAAA;AAEpD,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,YAAA,EAAc,MAAM,CAAA;AAE1C,QAAA,IAAA,EAAA;AAEA,QAAA,IAAI,QAAQ,UAAA,EAAY;AACpB,UAAA,MAAM,SAAA,GAAY,EAAA;AAClB,UAAA,MAAM,WAAW,IAAA,GAAO,UAAA;AACxB,UAAA,MAAM,QAAQ,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,CAAC,CAAA,GAAI,GAAA;AAClD,UAAA,UAAA,CAAW,SAAS,KAAK,CAAA;AAAA,QAC7B,CAAA,MAAO;AACH,UAAA,YAAA,CAAa,WAAA,EAAY;AACzB,UAAA,OAAA,CAAQ,OAAO,OAAA,EAAQ;AACvB,UAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,GAAQ,IAAA;AAC/B,UAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,GAAQ,GAAA;AAC/B,UAAA,OAAA,CAAQ,MAAA,CAAO,OAAA;AAAA,YACX,KAAK,KAAK,CAAA,EAAG,IAAI,CAAA,eAAA,EAAkB,KAAK,GAAG,KAAK,CAAA;AAAA,WACpD;AACA,UAAA,OAAA,EAAQ;AAAA,QACZ;AAAA,MACJ,CAAA;AAEA,MAAA,OAAA,EAAQ;AAAA,IACZ,CAAC,CAAA;AAAA,EACL;AAAA,EAEQ,OAAA,CACJ,OAAA,EACA,KAAA,EACA,OAAA,EACI;AACJ,IAAA,MAAM,KAAA,GAAQ,QAAQ,OAAA,GAAU,OAAA;AAChC,IAAA,MAAM,KAAA,GAAQ,OAAA,GAAW,KAAA,GAAQ,KAAA,GAAQ,GAAA,GAAO,IAAA;AAChD,IAAA,MAAM,OAAA,GAAU,OAAA,GAAW,KAAA,GAAQ,QAAA,GAAW,MAAA,GAAU,EAAA;AACxD,IAAA,MAAM,MAAA,GAAS,UAAU,KAAA,GAAQ,GAAA;AAEjC,IAAA,MAAM,GAAA,GAAM,CAAA,EAAA,EAAK,MAAM,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA;AAC5C,IAAA,MAAM,MAAM,CAAA,EAAA,EAAK,MAAM,IAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,IAAI,OAAO,KAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAA;AACrG,IAAA,MAAM,GAAA,GAAM,CAAA,EAAA,EAAK,MAAM,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA;AAE5C,IAAA,OAAA,CAAQ,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAA,EAAO,GAAG,CAAA;AAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AAAA,EACvD;AAAA,EAEQ,SAAS,OAAA,EAAqC;AAClD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACxB,MAAA,OAAA,CAAQ,QAAA,CAAS,MAAM,SAAS,CAAA;AAChC,MAAA,IAAI,IAAI,CAAA,EAAG;AACP,QAAA,OAAA,CAAQ,QAAA,CAAS,MAAM,QAAQ,CAAA;AAAA,MACnC;AAAA,IACJ;AACA,IAAA,OAAA,CAAQ,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,EAC/B;AACJ;;;ACtJO,IAAM,WAAA,GAA0B;AAAA,EACnC,UAAA,EAAY,WAAA;AAAA,EACZ,IAAA,EAAM,oBAAA;AAAA,EACN,UAAA,EAAY,CAAC,IAAI,wBAAA,EAA0B,CAAA;AAAA,EAC3C,YAAA,EAAc;AAAA,IACV,EAAA,EAAI,EAAE,uBAAA,EAAyB,+CAAA,EAA6C;AAAA,IAC5E,EAAA,EAAI,EAAE,uBAAA,EAAyB,mDAAA,EAAwC;AAAA,IACvE,EAAA,EAAI,EAAE,uBAAA,EAAyB,yCAAA,EAAuC;AAAA,IACtE,EAAA,EAAI,EAAE,uBAAA,EAAyB,kDAAA,EAA6C;AAAA,IAC5E,EAAA,EAAI,EAAE,uBAAA,EAAyB,wCAAA,EAAsC;AAAA,IACrE,EAAA,EAAI,EAAE,uBAAA,EAAyB,iFAAA,EAAiB;AAAA,IAChD,EAAA,EAAI,EAAE,uBAAA,EAAyB,wEAAA,EAAkB;AAAA,IACjD,EAAA,EAAI,EAAE,uBAAA,EAAyB,mDAAA,EAAY;AAAA,IAC3C,EAAA,EAAI,EAAE,uBAAA,EAAyB,sMAAA,EAAuC;AAAA,IACtE,EAAA,EAAI,EAAE,uBAAA,EAAyB,gDAAA;AAAuC;AAE9E","file":"public-api.js","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliCommandParameterDescriptor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst RESET = '\\x1b[0m';\nconst GREEN = '\\x1b[38;5;82m';\nconst RED = '\\x1b[38;5;196m';\nconst CYAN = '\\x1b[38;5;45m';\nconst DIM = '\\x1b[2m';\nconst BOLD = '\\x1b[1m';\nconst GREEN_BG = '\\x1b[48;5;22m';\nconst RED_BG = '\\x1b[48;5;52m';\n\nexport class CliYesnoCommandProcessor implements ICliCommandProcessor {\n command = 'yesno';\n\n description = 'Generate a random yes/no answer with animation';\n\n acceptsRawInput = true;\n\n author = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '🎰',\n };\n\n parameters?: ICliCommandParameterDescriptor[] = [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of rounds to run (default: 1)',\n required: false,\n type: 'number',\n defaultValue: '1',\n },\n ];\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const count = parseInt(command.args['count'] || command.args['n']) || 1;\n const question = command.value?.trim();\n\n if (question) {\n context.writer.writeln(\n `${CYAN}?${RESET} ${BOLD}${question}${RESET}`,\n );\n context.writer.writeln();\n }\n\n for (let i = 0; i < count; i++) {\n if (i > 0) {\n context.writer.writeln();\n }\n\n await this.runSlotMachine(context);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('yesno', CliForegroundColor.Cyan)} Generate a random yes/no`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('yesno Should I deploy?', CliForegroundColor.Cyan)} Ask a question`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('yesno --count=5', CliForegroundColor.Cyan)} Run 5 rounds`,\n );\n }\n\n private runSlotMachine(context: ICliExecutionContext): Promise<void> {\n return new Promise<void>((resolve) => {\n const result = Math.random() < 0.5;\n const totalSteps = 20;\n let step = 0;\n let aborted = false;\n\n const subscription = context.onAbort.subscribe(() => {\n aborted = true;\n subscription.unsubscribe();\n this.clearBox(context);\n context.writer.writeln(`${DIM}(cancelled)${RESET}`);\n resolve();\n });\n\n const animate = () => {\n if (aborted) {\n return;\n }\n\n this.clearBox(context);\n\n const isLast = step === totalSteps;\n const currentValue = isLast ? result : step % 2 === 0;\n\n this.drawBox(context, currentValue, isLast);\n\n step++;\n\n if (step <= totalSteps) {\n const baseDelay = 60;\n const progress = step / totalSteps;\n const delay = baseDelay + Math.pow(progress, 3) * 440;\n setTimeout(animate, delay);\n } else {\n subscription.unsubscribe();\n context.writer.writeln();\n const label = result ? 'YES' : 'NO';\n const color = result ? GREEN : RED;\n context.writer.writeln(\n ` ${color}${BOLD}The answer is: ${label}${RESET}`,\n );\n resolve();\n }\n };\n\n animate();\n });\n }\n\n private drawBox(\n context: ICliExecutionContext,\n value: boolean,\n isFinal: boolean,\n ): void {\n const label = value ? ' YES ' : ' NO ';\n const color = isFinal ? (value ? GREEN : RED) : CYAN;\n const bgColor = isFinal ? (value ? GREEN_BG : RED_BG) : '';\n const border = isFinal ? color : DIM;\n\n const top = ` ${border}+-----------+${RESET}`;\n const mid = ` ${border}|${RESET} ${bgColor}${color}${BOLD} > ${label} < ${RESET} ${border}|${RESET}`;\n const bot = ` ${border}+-----------+${RESET}`;\n\n context.terminal.write(`${top}\\r\\n${mid}\\r\\n${bot}`);\n }\n\n private clearBox(context: ICliExecutionContext): void {\n for (let i = 0; i < 3; i++) {\n context.terminal.write('\\x1b[2K');\n if (i < 2) {\n context.terminal.write('\\x1b[A');\n }\n }\n context.terminal.write('\\r');\n }\n}\n","/*\n * Public API Surface of yesno\n */\n\nexport * from './lib/processors/cli-yesno-command-processor';\n\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliYesnoCommandProcessor } from './lib/processors/cli-yesno-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const yesnoModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-yesno',\n processors: [new CliYesnoCommandProcessor()],\n translations: {\n es: { 'cli.yesno.description': 'Generar una respuesta aleatoria de sí o no' },\n fr: { 'cli.yesno.description': 'Générer une réponse aléatoire oui/non' },\n de: { 'cli.yesno.description': 'Zufällige Ja/Nein-Antwort generieren' },\n pt: { 'cli.yesno.description': 'Gerar uma resposta aleatória de sim ou não' },\n it: { 'cli.yesno.description': 'Generare una risposta casuale sì/no' },\n ja: { 'cli.yesno.description': 'ランダムにはい/いいえを生成' },\n ko: { 'cli.yesno.description': '무작위 예/아니오 답변 생성' },\n zh: { 'cli.yesno.description': '随机生成是/否答案' },\n ru: { 'cli.yesno.description': 'Сгенерировать случайный ответ да/нет' },\n ro: { 'cli.yesno.description': 'Generează un răspuns aleatoriu da/nu' },\n },\n};\n"]}
|
package/public-api.mjs
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { DefaultLibraryAuthor, CliForegroundColor } from '@qodalis/cli-core';
|
|
2
|
+
|
|
3
|
+
// src/lib/processors/cli-yesno-command-processor.ts
|
|
4
|
+
|
|
5
|
+
// src/lib/version.ts
|
|
6
|
+
var LIBRARY_VERSION = "2.0.0-beta.1";
|
|
7
|
+
var API_VERSION = 2;
|
|
8
|
+
|
|
9
|
+
// src/lib/processors/cli-yesno-command-processor.ts
|
|
10
|
+
var RESET = "\x1B[0m";
|
|
11
|
+
var GREEN = "\x1B[38;5;82m";
|
|
12
|
+
var RED = "\x1B[38;5;196m";
|
|
13
|
+
var CYAN = "\x1B[38;5;45m";
|
|
14
|
+
var DIM = "\x1B[2m";
|
|
15
|
+
var BOLD = "\x1B[1m";
|
|
16
|
+
var GREEN_BG = "\x1B[48;5;22m";
|
|
17
|
+
var RED_BG = "\x1B[48;5;52m";
|
|
18
|
+
var CliYesnoCommandProcessor = class {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.command = "yesno";
|
|
21
|
+
this.description = "Generate a random yes/no answer with animation";
|
|
22
|
+
this.acceptsRawInput = true;
|
|
23
|
+
this.author = DefaultLibraryAuthor;
|
|
24
|
+
this.version = LIBRARY_VERSION;
|
|
25
|
+
this.metadata = {
|
|
26
|
+
icon: "\u{1F3B0}"
|
|
27
|
+
};
|
|
28
|
+
this.parameters = [
|
|
29
|
+
{
|
|
30
|
+
name: "count",
|
|
31
|
+
aliases: ["n"],
|
|
32
|
+
description: "Number of rounds to run (default: 1)",
|
|
33
|
+
required: false,
|
|
34
|
+
type: "number",
|
|
35
|
+
defaultValue: "1"
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
this.processors = [];
|
|
39
|
+
}
|
|
40
|
+
async processCommand(command, context) {
|
|
41
|
+
const count = parseInt(command.args["count"] || command.args["n"]) || 1;
|
|
42
|
+
const question = command.value?.trim();
|
|
43
|
+
if (question) {
|
|
44
|
+
context.writer.writeln(
|
|
45
|
+
`${CYAN}?${RESET} ${BOLD}${question}${RESET}`
|
|
46
|
+
);
|
|
47
|
+
context.writer.writeln();
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < count; i++) {
|
|
50
|
+
if (i > 0) {
|
|
51
|
+
context.writer.writeln();
|
|
52
|
+
}
|
|
53
|
+
await this.runSlotMachine(context);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
writeDescription(context) {
|
|
57
|
+
const { writer } = context;
|
|
58
|
+
writer.writeln(this.description);
|
|
59
|
+
writer.writeln();
|
|
60
|
+
writer.writeln(
|
|
61
|
+
` ${writer.wrapInColor("yesno", CliForegroundColor.Cyan)} Generate a random yes/no`
|
|
62
|
+
);
|
|
63
|
+
writer.writeln(
|
|
64
|
+
` ${writer.wrapInColor("yesno Should I deploy?", CliForegroundColor.Cyan)} Ask a question`
|
|
65
|
+
);
|
|
66
|
+
writer.writeln(
|
|
67
|
+
` ${writer.wrapInColor("yesno --count=5", CliForegroundColor.Cyan)} Run 5 rounds`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
runSlotMachine(context) {
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const result = Math.random() < 0.5;
|
|
73
|
+
const totalSteps = 20;
|
|
74
|
+
let step = 0;
|
|
75
|
+
let aborted = false;
|
|
76
|
+
const subscription = context.onAbort.subscribe(() => {
|
|
77
|
+
aborted = true;
|
|
78
|
+
subscription.unsubscribe();
|
|
79
|
+
this.clearBox(context);
|
|
80
|
+
context.writer.writeln(`${DIM}(cancelled)${RESET}`);
|
|
81
|
+
resolve();
|
|
82
|
+
});
|
|
83
|
+
const animate = () => {
|
|
84
|
+
if (aborted) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.clearBox(context);
|
|
88
|
+
const isLast = step === totalSteps;
|
|
89
|
+
const currentValue = isLast ? result : step % 2 === 0;
|
|
90
|
+
this.drawBox(context, currentValue, isLast);
|
|
91
|
+
step++;
|
|
92
|
+
if (step <= totalSteps) {
|
|
93
|
+
const baseDelay = 60;
|
|
94
|
+
const progress = step / totalSteps;
|
|
95
|
+
const delay = baseDelay + Math.pow(progress, 3) * 440;
|
|
96
|
+
setTimeout(animate, delay);
|
|
97
|
+
} else {
|
|
98
|
+
subscription.unsubscribe();
|
|
99
|
+
context.writer.writeln();
|
|
100
|
+
const label = result ? "YES" : "NO";
|
|
101
|
+
const color = result ? GREEN : RED;
|
|
102
|
+
context.writer.writeln(
|
|
103
|
+
` ${color}${BOLD}The answer is: ${label}${RESET}`
|
|
104
|
+
);
|
|
105
|
+
resolve();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
animate();
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
drawBox(context, value, isFinal) {
|
|
112
|
+
const label = value ? " YES " : " NO ";
|
|
113
|
+
const color = isFinal ? value ? GREEN : RED : CYAN;
|
|
114
|
+
const bgColor = isFinal ? value ? GREEN_BG : RED_BG : "";
|
|
115
|
+
const border = isFinal ? color : DIM;
|
|
116
|
+
const top = ` ${border}+-----------+${RESET}`;
|
|
117
|
+
const mid = ` ${border}|${RESET} ${bgColor}${color}${BOLD} > ${label} < ${RESET} ${border}|${RESET}`;
|
|
118
|
+
const bot = ` ${border}+-----------+${RESET}`;
|
|
119
|
+
context.terminal.write(`${top}\r
|
|
120
|
+
${mid}\r
|
|
121
|
+
${bot}`);
|
|
122
|
+
}
|
|
123
|
+
clearBox(context) {
|
|
124
|
+
for (let i = 0; i < 3; i++) {
|
|
125
|
+
context.terminal.write("\x1B[2K");
|
|
126
|
+
if (i < 2) {
|
|
127
|
+
context.terminal.write("\x1B[A");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
context.terminal.write("\r");
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/public-api.ts
|
|
135
|
+
var yesnoModule = {
|
|
136
|
+
apiVersion: API_VERSION,
|
|
137
|
+
name: "@qodalis/cli-yesno",
|
|
138
|
+
processors: [new CliYesnoCommandProcessor()],
|
|
139
|
+
translations: {
|
|
140
|
+
es: { "cli.yesno.description": "Generar una respuesta aleatoria de s\xED o no" },
|
|
141
|
+
fr: { "cli.yesno.description": "G\xE9n\xE9rer une r\xE9ponse al\xE9atoire oui/non" },
|
|
142
|
+
de: { "cli.yesno.description": "Zuf\xE4llige Ja/Nein-Antwort generieren" },
|
|
143
|
+
pt: { "cli.yesno.description": "Gerar uma resposta aleat\xF3ria de sim ou n\xE3o" },
|
|
144
|
+
it: { "cli.yesno.description": "Generare una risposta casuale s\xEC/no" },
|
|
145
|
+
ja: { "cli.yesno.description": "\u30E9\u30F3\u30C0\u30E0\u306B\u306F\u3044/\u3044\u3044\u3048\u3092\u751F\u6210" },
|
|
146
|
+
ko: { "cli.yesno.description": "\uBB34\uC791\uC704 \uC608/\uC544\uB2C8\uC624 \uB2F5\uBCC0 \uC0DD\uC131" },
|
|
147
|
+
zh: { "cli.yesno.description": "\u968F\u673A\u751F\u6210\u662F/\u5426\u7B54\u6848" },
|
|
148
|
+
ru: { "cli.yesno.description": "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0434\u0430/\u043D\u0435\u0442" },
|
|
149
|
+
ro: { "cli.yesno.description": "Genereaz\u0103 un r\u0103spuns aleatoriu da/nu" }
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export { API_VERSION, CliYesnoCommandProcessor, LIBRARY_VERSION, yesnoModule };
|
|
154
|
+
//# sourceMappingURL=public-api.mjs.map
|
|
155
|
+
//# sourceMappingURL=public-api.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/yesno/src/lib/version.ts","../../packages/plugins/yesno/src/lib/processors/cli-yesno-command-processor.ts","../../packages/plugins/yesno/src/public-api.ts"],"names":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliCommandParameterDescriptor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst RESET = '\\x1b[0m';\nconst GREEN = '\\x1b[38;5;82m';\nconst RED = '\\x1b[38;5;196m';\nconst CYAN = '\\x1b[38;5;45m';\nconst DIM = '\\x1b[2m';\nconst BOLD = '\\x1b[1m';\nconst GREEN_BG = '\\x1b[48;5;22m';\nconst RED_BG = '\\x1b[48;5;52m';\n\nexport class CliYesnoCommandProcessor implements ICliCommandProcessor {\n command = 'yesno';\n\n description = 'Generate a random yes/no answer with animation';\n\n acceptsRawInput = true;\n\n author = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '🎰',\n };\n\n parameters?: ICliCommandParameterDescriptor[] = [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of rounds to run (default: 1)',\n required: false,\n type: 'number',\n defaultValue: '1',\n },\n ];\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const count = parseInt(command.args['count'] || command.args['n']) || 1;\n const question = command.value?.trim();\n\n if (question) {\n context.writer.writeln(\n `${CYAN}?${RESET} ${BOLD}${question}${RESET}`,\n );\n context.writer.writeln();\n }\n\n for (let i = 0; i < count; i++) {\n if (i > 0) {\n context.writer.writeln();\n }\n\n await this.runSlotMachine(context);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('yesno', CliForegroundColor.Cyan)} Generate a random yes/no`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('yesno Should I deploy?', CliForegroundColor.Cyan)} Ask a question`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('yesno --count=5', CliForegroundColor.Cyan)} Run 5 rounds`,\n );\n }\n\n private runSlotMachine(context: ICliExecutionContext): Promise<void> {\n return new Promise<void>((resolve) => {\n const result = Math.random() < 0.5;\n const totalSteps = 20;\n let step = 0;\n let aborted = false;\n\n const subscription = context.onAbort.subscribe(() => {\n aborted = true;\n subscription.unsubscribe();\n this.clearBox(context);\n context.writer.writeln(`${DIM}(cancelled)${RESET}`);\n resolve();\n });\n\n const animate = () => {\n if (aborted) {\n return;\n }\n\n this.clearBox(context);\n\n const isLast = step === totalSteps;\n const currentValue = isLast ? result : step % 2 === 0;\n\n this.drawBox(context, currentValue, isLast);\n\n step++;\n\n if (step <= totalSteps) {\n const baseDelay = 60;\n const progress = step / totalSteps;\n const delay = baseDelay + Math.pow(progress, 3) * 440;\n setTimeout(animate, delay);\n } else {\n subscription.unsubscribe();\n context.writer.writeln();\n const label = result ? 'YES' : 'NO';\n const color = result ? GREEN : RED;\n context.writer.writeln(\n ` ${color}${BOLD}The answer is: ${label}${RESET}`,\n );\n resolve();\n }\n };\n\n animate();\n });\n }\n\n private drawBox(\n context: ICliExecutionContext,\n value: boolean,\n isFinal: boolean,\n ): void {\n const label = value ? ' YES ' : ' NO ';\n const color = isFinal ? (value ? GREEN : RED) : CYAN;\n const bgColor = isFinal ? (value ? GREEN_BG : RED_BG) : '';\n const border = isFinal ? color : DIM;\n\n const top = ` ${border}+-----------+${RESET}`;\n const mid = ` ${border}|${RESET} ${bgColor}${color}${BOLD} > ${label} < ${RESET} ${border}|${RESET}`;\n const bot = ` ${border}+-----------+${RESET}`;\n\n context.terminal.write(`${top}\\r\\n${mid}\\r\\n${bot}`);\n }\n\n private clearBox(context: ICliExecutionContext): void {\n for (let i = 0; i < 3; i++) {\n context.terminal.write('\\x1b[2K');\n if (i < 2) {\n context.terminal.write('\\x1b[A');\n }\n }\n context.terminal.write('\\r');\n }\n}\n","/*\n * Public API Surface of yesno\n */\n\nexport * from './lib/processors/cli-yesno-command-processor';\n\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliYesnoCommandProcessor } from './lib/processors/cli-yesno-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const yesnoModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-yesno',\n processors: [new CliYesnoCommandProcessor()],\n translations: {\n es: { 'cli.yesno.description': 'Generar una respuesta aleatoria de sí o no' },\n fr: { 'cli.yesno.description': 'Générer une réponse aléatoire oui/non' },\n de: { 'cli.yesno.description': 'Zufällige Ja/Nein-Antwort generieren' },\n pt: { 'cli.yesno.description': 'Gerar uma resposta aleatória de sim ou não' },\n it: { 'cli.yesno.description': 'Generare una risposta casuale sì/no' },\n ja: { 'cli.yesno.description': 'ランダムにはい/いいえを生成' },\n ko: { 'cli.yesno.description': '무작위 예/아니오 답변 생성' },\n zh: { 'cli.yesno.description': '随机生成是/否答案' },\n ru: { 'cli.yesno.description': 'Сгенерировать случайный ответ да/нет' },\n ro: { 'cli.yesno.description': 'Generează un răspuns aleatoriu da/nu' },\n },\n};\n"]}
|