@botpress/cli 0.0.9 → 0.0.11

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.
Files changed (89) hide show
  1. package/dist/api-client.js +107 -0
  2. package/dist/app/api-utils.js +9 -3
  3. package/dist/app/base.js +1 -3
  4. package/dist/app/errors.js +8 -0
  5. package/dist/app/file-paths.js +4 -2
  6. package/dist/app/index.js +17 -12
  7. package/dist/app/user.js +73 -23
  8. package/dist/code-generation/action.js +70 -0
  9. package/dist/code-generation/channel.js +51 -0
  10. package/dist/code-generation/configuration.js +40 -0
  11. package/dist/code-generation/const.js +31 -0
  12. package/dist/code-generation/event.js +41 -0
  13. package/dist/code-generation/index.js +80 -0
  14. package/dist/code-generation/integration-impl.js +147 -0
  15. package/dist/code-generation/integration-instance.js +79 -0
  16. package/dist/code-generation/message.js +41 -0
  17. package/dist/code-generation/module.js +115 -0
  18. package/dist/code-generation/typings.js +16 -0
  19. package/dist/command-definitions.js +61 -0
  20. package/dist/command-implementations/add-command.js +124 -0
  21. package/dist/command-implementations/base-command.js +53 -0
  22. package/dist/command-implementations/bot-commands.js +89 -0
  23. package/dist/command-implementations/build-command.js +48 -0
  24. package/dist/command-implementations/bundle-command.js +58 -0
  25. package/dist/command-implementations/deploy-command.js +162 -0
  26. package/dist/command-implementations/dev-command.js +168 -0
  27. package/dist/command-implementations/gen-command.js +58 -0
  28. package/dist/command-implementations/global-command.js +111 -0
  29. package/dist/command-implementations/index.js +78 -0
  30. package/dist/command-implementations/init-command.js +85 -0
  31. package/dist/command-implementations/integration-commands.js +107 -0
  32. package/dist/command-implementations/login-command.js +75 -0
  33. package/dist/command-implementations/logout-command.js +34 -0
  34. package/dist/command-implementations/project-command.js +115 -0
  35. package/dist/command-implementations/serve-command.js +53 -0
  36. package/dist/command-tree.js +59 -0
  37. package/dist/config.js +85 -112
  38. package/dist/consts.js +14 -1
  39. package/dist/errors.js +156 -0
  40. package/dist/index.js +13 -243
  41. package/dist/integration-ref.js +61 -0
  42. package/dist/logger/base-logger.js +5 -20
  43. package/dist/logger/index.js +3 -2
  44. package/dist/path-utils.js +6 -0
  45. package/dist/register-yargs.js +85 -0
  46. package/dist/typings.js +16 -0
  47. package/dist/utils/cache-utils.js +99 -0
  48. package/dist/utils/esbuild-utils.js +89 -0
  49. package/dist/utils/event-emitter.js +62 -0
  50. package/dist/utils/file-watcher.js +68 -0
  51. package/dist/utils/index.js +55 -0
  52. package/dist/utils/path-utils.js +83 -0
  53. package/dist/utils/prompt-utils.js +75 -0
  54. package/dist/utils/require-utils.js +49 -0
  55. package/dist/utils/string-utils.js +38 -0
  56. package/dist/worker/child-entrypoint.js +3 -3
  57. package/package.json +7 -5
  58. package/templates/echo-bot/.botpress/project.cache.json +1 -0
  59. package/templates/echo-bot/package.json +22 -0
  60. package/templates/echo-bot/readme.md +5 -0
  61. package/templates/echo-bot/src/index.ts +44 -0
  62. package/templates/echo-bot/tsconfig.json +15 -0
  63. package/templates/empty-integration/.botpress/implementation/actions/index.ts +7 -0
  64. package/templates/empty-integration/.botpress/implementation/channels/channel/audio.ts +10 -0
  65. package/templates/empty-integration/.botpress/implementation/channels/channel/card.ts +17 -0
  66. package/templates/empty-integration/.botpress/implementation/channels/channel/carousel.ts +19 -0
  67. package/templates/empty-integration/.botpress/implementation/channels/channel/choice.ts +14 -0
  68. package/templates/empty-integration/.botpress/implementation/channels/channel/dropdown.ts +14 -0
  69. package/templates/empty-integration/.botpress/implementation/channels/channel/file.ts +11 -0
  70. package/templates/empty-integration/.botpress/implementation/channels/channel/image.ts +10 -0
  71. package/templates/empty-integration/.botpress/implementation/channels/channel/index.ts +40 -0
  72. package/templates/empty-integration/.botpress/implementation/channels/channel/location.ts +11 -0
  73. package/templates/empty-integration/.botpress/implementation/channels/channel/markdown.ts +10 -0
  74. package/templates/empty-integration/.botpress/implementation/channels/channel/text.ts +10 -0
  75. package/templates/empty-integration/.botpress/implementation/channels/channel/video.ts +10 -0
  76. package/templates/empty-integration/.botpress/implementation/channels/index.ts +10 -0
  77. package/templates/empty-integration/.botpress/implementation/configuration.ts +10 -0
  78. package/templates/empty-integration/.botpress/implementation/events/index.ts +7 -0
  79. package/templates/empty-integration/.botpress/implementation/index.ts +17 -0
  80. package/templates/empty-integration/.botpress/index.ts +1 -0
  81. package/templates/empty-integration/.botpress/project.cache.json +1 -0
  82. package/templates/empty-integration/integration.definition.ts +13 -0
  83. package/templates/empty-integration/package.json +22 -0
  84. package/templates/empty-integration/readme.md +5 -0
  85. package/templates/empty-integration/src/index.ts +58 -0
  86. package/templates/empty-integration/tsconfig.json +15 -0
  87. package/.ignore.me.github/index.ts +0 -38
  88. package/dist/github-download.js +0 -159
  89. package/dist/github-fetch.js +0 -173
package/dist/index.js CHANGED
@@ -18,260 +18,30 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
18
18
  mod
19
19
  ));
20
20
  var import_yargs_extra = __toESM(require("@bpinternal/yargs-extra"));
21
- var import_process = require("process");
22
- var app = __toESM(require("./app"));
23
- var config = __toESM(require("./config"));
21
+ var import_command_definitions = __toESM(require("./command-definitions"));
22
+ var import_command_implementations = __toESM(require("./command-implementations"));
23
+ var tree = __toESM(require("./command-tree"));
24
+ var errors = __toESM(require("./errors"));
24
25
  var import_logger = require("./logger");
25
- const { name, version } = require("../package.json");
26
- const pkg = { name, version };
27
- const errorLogger = new import_logger.Logger();
26
+ var import_register_yargs = require("./register-yargs");
27
+ var utils = __toESM(require("./utils"));
28
+ const CLI_ROOT_DIR = utils.path.join(__dirname, "..");
28
29
  const logError = (thrown) => {
29
- const error = app.errors.BotpressCLIError.map(thrown);
30
- errorLogger.error(error.message);
30
+ const error = errors.BotpressCLIError.map(thrown);
31
+ new import_logger.Logger().error(error.message);
31
32
  };
32
33
  const onError = (thrown) => {
33
34
  logError(thrown);
34
- (0, import_process.exit)(1);
35
+ process.exit(1);
35
36
  };
36
37
  const yargsFail = (msg) => {
37
38
  logError(`${msg}
38
39
  `);
39
40
  import_yargs_extra.default.showHelp();
40
- (0, import_process.exit)(1);
41
+ process.exit(1);
41
42
  };
42
43
  process.on("uncaughtException", (thrown) => onError(thrown));
43
44
  process.on("unhandledRejection", (thrown) => onError(thrown));
44
- const parseArguments = (schema, argv) => {
45
- const yargsEnv = (0, import_yargs_extra.parseEnv)(schema, "BP");
46
- return (0, import_yargs_extra.cleanupConfig)(schema, { ...argv, ...yargsEnv });
47
- };
48
- import_yargs_extra.default.command(
49
- "login",
50
- "Login to Botpress Cloud",
51
- () => import_yargs_extra.default.options(config.loginSchema),
52
- async (argv) => {
53
- try {
54
- const parsed = parseArguments(config.loginSchema, argv);
55
- const commands = await app.forUser({ ...parsed, ...pkg });
56
- await commands.login(parsed);
57
- commands.teardown();
58
- } catch (e) {
59
- onError(e);
60
- }
61
- }
62
- ).command(
63
- "logout",
64
- "Logout of Botpress Cloud",
65
- () => import_yargs_extra.default.options(config.logoutSchema),
66
- async (argv) => {
67
- try {
68
- const parsed = parseArguments(config.logoutSchema, argv);
69
- const commands = await app.forUser({ ...parsed, ...pkg });
70
- await commands.logout();
71
- commands.teardown();
72
- } catch (e) {
73
- onError(e);
74
- }
75
- }
76
- ).command("bots", "bots related commands", (yargz) => {
77
- yargz.command(
78
- ["create", "new"],
79
- "Create new bot",
80
- () => yargz.options({ ...config.createBotSchema }),
81
- async (argv) => {
82
- try {
83
- const parsed = parseArguments(config.createBotSchema, argv);
84
- const commands = await app.forUser({ ...parsed, ...pkg });
85
- await commands.createBot(parsed);
86
- commands.teardown();
87
- } catch (e) {
88
- onError(e);
89
- }
90
- }
91
- ).command(
92
- ["list", "ls"],
93
- "List bots",
94
- () => yargz.options({ ...config.listBotsSchema }),
95
- async (argv) => {
96
- try {
97
- const parsed = parseArguments(config.listBotsSchema, argv);
98
- const commands = await app.forUser({ ...parsed, ...pkg });
99
- await commands.listBots(parsed);
100
- commands.teardown();
101
- } catch (e) {
102
- onError(e);
103
- }
104
- }
105
- ).command(
106
- "get <botRef>",
107
- "Get bot",
108
- () => yargz.positional("botRef", config.botRef).options({ ...config.readBotSchema }),
109
- async (argv) => {
110
- try {
111
- const parsed = parseArguments(config.readBotSchema, argv);
112
- const commands = await app.forUser({ ...parsed, ...pkg });
113
- await commands.getBot(argv.botRef, parsed);
114
- commands.teardown();
115
- } catch (e) {
116
- onError(e);
117
- }
118
- }
119
- ).command(
120
- ["delete <botRef>", "rm <botRef>"],
121
- "Delete bot",
122
- () => yargz.positional("botRef", config.botRef).options({ ...config.deleteBotSchema }),
123
- async (argv) => {
124
- try {
125
- const parsed = parseArguments(config.deleteBotSchema, argv);
126
- const commands = await app.forUser({ ...parsed, ...pkg });
127
- await commands.deleteBot(argv.botRef, parsed);
128
- commands.teardown();
129
- } catch (e) {
130
- onError(e);
131
- }
132
- }
133
- );
134
- }).command("integrations", "integrations related commands", (yargz) => {
135
- yargz.command(
136
- ["list", "ls"],
137
- "List integrations",
138
- () => yargz.options({ ...config.listIntegrationsSchema }),
139
- async (argv) => {
140
- try {
141
- const parsed = parseArguments(config.listIntegrationsSchema, argv);
142
- const commands = await app.forUser({ ...parsed, ...pkg });
143
- await commands.listIntegrations(parsed);
144
- commands.teardown();
145
- } catch (e) {
146
- onError(e);
147
- }
148
- }
149
- ).command(
150
- "get <integrationRef>",
151
- "Get integration",
152
- () => yargz.positional("integrationRef", config.integrationRef).options({ ...config.readIntegrationSchema }),
153
- async (argv) => {
154
- try {
155
- const parsed = parseArguments(config.readIntegrationSchema, argv);
156
- const commands = await app.forUser({ ...parsed, ...pkg });
157
- await commands.getIntegration(argv.integrationRef, parsed);
158
- commands.teardown();
159
- } catch (e) {
160
- onError(e);
161
- }
162
- }
163
- ).command(
164
- ["delete <integrationRef>", "rm <integrationRef>"],
165
- "Delete integration",
166
- () => yargz.positional("integrationRef", config.integrationRef).options({ ...config.deleteIntegrationSchema }),
167
- async (argv) => {
168
- try {
169
- const parsed = parseArguments(config.readIntegrationSchema, argv);
170
- const commands = await app.forUser({ ...parsed, ...pkg });
171
- await commands.deleteIntegration(argv.integrationRef, parsed);
172
- commands.teardown();
173
- } catch (e) {
174
- onError(e);
175
- }
176
- }
177
- );
178
- }).command(
179
- "bundle",
180
- "Bundle a botpress project",
181
- () => import_yargs_extra.default.options(config.bundleSchema),
182
- async (argv) => {
183
- try {
184
- const parsed = parseArguments(config.bundleSchema, argv);
185
- const commands = await app.forProject({ ...parsed, ...pkg });
186
- await commands.bundleProject(parsed);
187
- commands.teardown();
188
- } catch (e) {
189
- onError(e);
190
- }
191
- }
192
- ).command(
193
- "gen",
194
- "Generate typings for intellisense during development",
195
- () => import_yargs_extra.default.options(config.generateSchema),
196
- async (argv) => {
197
- try {
198
- const parsed = parseArguments(config.generateSchema, argv);
199
- const commands = await app.forProject({ ...parsed, ...pkg });
200
- await commands.generateTypings(parsed);
201
- commands.teardown();
202
- } catch (e) {
203
- onError(e);
204
- }
205
- }
206
- ).command(
207
- "build",
208
- "Generate typings and bundle a botpress project",
209
- () => import_yargs_extra.default.options(config.buildSchema),
210
- async (argv) => {
211
- try {
212
- const parsed = parseArguments(config.buildSchema, argv);
213
- const commands = await app.forProject({ ...parsed, ...pkg });
214
- await commands.buildProject(parsed);
215
- commands.teardown();
216
- } catch (e) {
217
- onError(e);
218
- }
219
- }
220
- ).command(
221
- "serve",
222
- "Serve your project locally",
223
- () => import_yargs_extra.default.options(config.serveSchema),
224
- async (argv) => {
225
- try {
226
- const parsed = parseArguments(config.serveSchema, argv);
227
- const commands = await app.forProject({ ...parsed, ...pkg });
228
- await commands.serveProject(parsed);
229
- commands.teardown();
230
- } catch (e) {
231
- onError(e);
232
- }
233
- }
234
- ).command(
235
- "deploy",
236
- "Deploy your project",
237
- () => import_yargs_extra.default.options(config.deploySchema),
238
- async (argv) => {
239
- try {
240
- const parsed = parseArguments(config.deploySchema, argv);
241
- const commands = await app.forProject({ ...parsed, ...pkg });
242
- await commands.deployProject(parsed);
243
- commands.teardown();
244
- } catch (e) {
245
- onError(e);
246
- }
247
- }
248
- ).command(
249
- "dev",
250
- "Run your project in dev mode",
251
- () => import_yargs_extra.default.options(config.devSchema),
252
- async (argv) => {
253
- try {
254
- const parsed = parseArguments(config.devSchema, argv);
255
- const commands = await app.forProject({ ...parsed, ...pkg });
256
- await commands.devProject(parsed);
257
- commands.teardown();
258
- } catch (e) {
259
- onError(e);
260
- }
261
- }
262
- ).command(
263
- "add <integrationRef>",
264
- "Install an integration in your bot",
265
- (yargz) => yargz.positional("integrationRef", config.integrationRef).options(config.addSchema),
266
- async (argv) => {
267
- try {
268
- const parsed = parseArguments(config.addSchema, argv);
269
- const commands = await app.forProject({ ...parsed, ...pkg });
270
- await commands.installIntegration(argv.integrationRef, parsed);
271
- commands.teardown();
272
- } catch (e) {
273
- onError(e);
274
- }
275
- }
276
- );
45
+ const commands = tree.zipTree(import_command_definitions.default, import_command_implementations.default);
46
+ (0, import_register_yargs.registerYargs)(import_yargs_extra.default, commands, { cliRootDir: CLI_ROOT_DIR });
277
47
  void import_yargs_extra.default.version(false).scriptName("bp").demandCommand(1, "You didn't provide any command. Use the --help flag to see the list of available commands.").recommendCommands().strict().help().fail(yargsFail).parse();
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var integration_ref_exports = {};
26
+ __export(integration_ref_exports, {
27
+ formatIntegrationRef: () => formatIntegrationRef,
28
+ parseIntegrationRef: () => parseIntegrationRef
29
+ });
30
+ module.exports = __toCommonJS(integration_ref_exports);
31
+ var import_semver = __toESM(require("semver"));
32
+ var uuid = __toESM(require("uuid"));
33
+ const LATEST_TAG = "latest";
34
+ const formatIntegrationRef = (ref) => {
35
+ if (ref.type === "id") {
36
+ return ref.id;
37
+ }
38
+ return `${ref.name}@${ref.version}`;
39
+ };
40
+ const parseIntegrationRef = (ref) => {
41
+ if (uuid.validate(ref)) {
42
+ return { type: "id", id: ref };
43
+ }
44
+ if (!ref.includes("@")) {
45
+ return { type: "name", name: ref, version: LATEST_TAG };
46
+ }
47
+ const [name, version] = ref.split("@");
48
+ if (!name || !version) {
49
+ return;
50
+ }
51
+ const cleanedVersion = version === LATEST_TAG ? version : import_semver.default.clean(version);
52
+ if (!cleanedVersion) {
53
+ return;
54
+ }
55
+ return { type: "name", name, version: cleanedVersion };
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ formatIntegrationRef,
60
+ parseIntegrationRef
61
+ });
@@ -89,7 +89,7 @@ class BaseLogger {
89
89
  this.opts = { ...DEFAULT_OPTIONS, ...opts };
90
90
  }
91
91
  log(message, props = {}) {
92
- if (this.opts.json) {
92
+ if (this.opts.json && !props.stderr) {
93
93
  return;
94
94
  }
95
95
  const prefix = this._resolvePrefix(props.prefix);
@@ -102,44 +102,29 @@ class BaseLogger {
102
102
  }
103
103
  const { depth } = opts;
104
104
  const msg = import_util.default.inspect(data, { colors: true, depth });
105
- this.print(msg);
105
+ this.log(msg);
106
106
  }
107
107
  debug(message, metadata) {
108
- if (!this.opts.verbose || this.opts.json) {
108
+ if (!this.opts.verbose) {
109
109
  return;
110
110
  }
111
111
  this.log(import_chalk.default.grey(message), { metadata, prefix: { symbol: "\u25CF", fg: "blue" } });
112
112
  }
113
113
  started(message, metadata) {
114
- if (this.opts.json) {
115
- return;
116
- }
117
114
  this.log(message, { metadata, prefix: { symbol: "\u25CB", fg: "purple" } });
118
115
  }
119
116
  success(message, metadata) {
120
- if (this.opts.json) {
121
- return;
122
- }
123
117
  this.log(message, { metadata, prefix: { symbol: "\u2713", fg: "green" } });
124
118
  }
125
119
  warn(message, metadata) {
126
- if (this.opts.json) {
127
- return;
128
- }
129
120
  this.log(message, { metadata, prefix: { symbol: "\u26A0", fg: "yellow" } });
130
121
  }
131
122
  error(message, metadata) {
132
- if (this.opts.json) {
133
- return;
134
- }
135
- this.log(message, { metadata, prefix: { symbol: "\xD7", fg: "red" } });
123
+ this.log(message, { metadata, prefix: { symbol: "\xD7", fg: "red" }, stderr: true });
136
124
  }
137
125
  box(message) {
138
- if (this.opts.json) {
139
- return;
140
- }
141
126
  const box = (0, import_boxen.default)(message, BOX_OPTIONS);
142
- this.print(box);
127
+ this.log(box);
143
128
  }
144
129
  _resolvePrefix(prefix) {
145
130
  if (!prefix) {
@@ -27,12 +27,13 @@ class Logger extends import_base_logger.BaseLogger {
27
27
  static _previousLine;
28
28
  print(message, props = {}) {
29
29
  this.cleanup();
30
+ const log = props.stderr ? console.error : console.info;
30
31
  const { metadata, prefix } = props;
31
32
  if (prefix) {
32
- console.log(prefix, message, metadata ?? "");
33
+ log(prefix, message, metadata ?? "");
33
34
  return;
34
35
  }
35
- console.log(message, metadata ?? "");
36
+ log(message, metadata ?? "");
36
37
  }
37
38
  line() {
38
39
  this.cleanup();
@@ -28,6 +28,7 @@ __export(path_utils_exports, {
28
28
  cwd: () => cwd,
29
29
  isAbsolute: () => isAbsolute,
30
30
  isPath: () => isPath,
31
+ join: () => join,
31
32
  relativeFrom: () => relativeFrom,
32
33
  rmExtension: () => rmExtension,
33
34
  toUnix: () => toUnix
@@ -37,6 +38,10 @@ var import_path = __toESM(require("path"));
37
38
  const cwd = () => process.cwd();
38
39
  const isAbsolute = (path) => import_path.default.isAbsolute(path);
39
40
  const isPath = (path) => isAbsolute(path) || path.startsWith(".");
41
+ const join = (abs, ...paths) => {
42
+ const joined = import_path.default.join(abs, ...paths);
43
+ return import_path.default.normalize(joined);
44
+ };
40
45
  const rmExtension = (filename) => filename.replace(/\.[^/.]+$/, "");
41
46
  const toUnix = (path) => path.split(import_path.default.sep).join(import_path.default.posix.sep);
42
47
  const absoluteFrom = (rootdir, target) => {
@@ -60,6 +65,7 @@ const relativeFrom = (rootdir, target) => {
60
65
  cwd,
61
66
  isAbsolute,
62
67
  isPath,
68
+ join,
63
69
  relativeFrom,
64
70
  rmExtension,
65
71
  toUnix
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var register_yargs_exports = {};
26
+ __export(register_yargs_exports, {
27
+ registerYargs: () => registerYargs
28
+ });
29
+ module.exports = __toCommonJS(register_yargs_exports);
30
+ var import_yargs_extra = require("@bpinternal/yargs-extra");
31
+ var import_lodash = __toESM(require("lodash"));
32
+ var tree = __toESM(require("./command-tree"));
33
+ const parseArguments = (schema, argv) => {
34
+ const yargsEnv = (0, import_yargs_extra.parseEnv)(schema, "BP");
35
+ return (0, import_yargs_extra.cleanupConfig)(schema, { ...argv, ...yargsEnv });
36
+ };
37
+ const registerYargs = (yargz, commands, props) => {
38
+ for (const cmdName in commands) {
39
+ const command = commands[cmdName];
40
+ if (tree.guards.command.isSubTree(command)) {
41
+ yargz.command(cmdName, command.description ?? cmdName, (y) => {
42
+ registerYargs(y, command.subcommands, props);
43
+ return y;
44
+ });
45
+ continue;
46
+ }
47
+ const { schema, description, alias } = command;
48
+ const aliases = alias ? [cmdName, alias] : [cmdName];
49
+ const options = Object.entries(schema);
50
+ let positionals = options.filter(
51
+ (value) => !!value[1].positional
52
+ );
53
+ let usage = aliases;
54
+ if (positionals.length) {
55
+ positionals = import_lodash.default.sortBy(positionals, ([, option]) => option.idx);
56
+ const positionalArgs = positionals.map(
57
+ ([optName, option]) => option.demandOption ? `<${optName}>` : `[${optName}]`
58
+ );
59
+ const positionalStr = positionalArgs.join(" ");
60
+ usage = aliases.map((optAlias) => `${optAlias} ${positionalStr}`);
61
+ }
62
+ yargz.command(
63
+ usage,
64
+ description ?? cmdName,
65
+ (y) => {
66
+ for (const [key, option] of Object.entries(schema)) {
67
+ if (option.positional) {
68
+ y = y.positional(key, option);
69
+ } else {
70
+ y = y.option(key, option);
71
+ }
72
+ }
73
+ return y;
74
+ },
75
+ async (argv) => {
76
+ const parsed = parseArguments(schema, argv);
77
+ await command.handler({ ...parsed, ...props });
78
+ }
79
+ );
80
+ }
81
+ };
82
+ // Annotate the CommonJS export names for ESM import in node:
83
+ 0 && (module.exports = {
84
+ registerYargs
85
+ });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var typings_exports = {};
16
+ module.exports = __toCommonJS(typings_exports);
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var cache_utils_exports = {};
26
+ __export(cache_utils_exports, {
27
+ FSKeyValueCache: () => FSKeyValueCache
28
+ });
29
+ module.exports = __toCommonJS(cache_utils_exports);
30
+ var import_fs = __toESM(require("fs"));
31
+ var import_path = __toESM(require("path"));
32
+ class FSKeyValueCache {
33
+ constructor(_filepath) {
34
+ this._filepath = _filepath;
35
+ }
36
+ _initialized = false;
37
+ async init() {
38
+ if (this._initialized) {
39
+ return;
40
+ }
41
+ const dirname = import_path.default.dirname(this._filepath);
42
+ if (!import_fs.default.existsSync(dirname)) {
43
+ await import_fs.default.promises.mkdir(dirname, { recursive: true });
44
+ }
45
+ if (!import_fs.default.existsSync(this._filepath)) {
46
+ await this._writeJSON(this._filepath, {});
47
+ }
48
+ this._initialized = true;
49
+ }
50
+ async sync(key, value, prompt) {
51
+ await this.init();
52
+ if (value) {
53
+ await this.set(key, value);
54
+ return value;
55
+ }
56
+ const data = await this.get(key);
57
+ const newValue = await prompt(data);
58
+ await this.set(key, newValue);
59
+ return newValue;
60
+ }
61
+ async has(key) {
62
+ await this.init();
63
+ const data = await this._readJSON(this._filepath);
64
+ return data[key] !== void 0;
65
+ }
66
+ async get(key) {
67
+ await this.init();
68
+ const data = await this._readJSON(this._filepath);
69
+ return data[key];
70
+ }
71
+ async set(key, value) {
72
+ await this.init();
73
+ const data = await this._readJSON(this._filepath);
74
+ data[key] = value;
75
+ return this._writeJSON(this._filepath, data);
76
+ }
77
+ async rm(key) {
78
+ await this.init();
79
+ const data = await this._readJSON(this._filepath);
80
+ delete data[key];
81
+ return this._writeJSON(this._filepath, data);
82
+ }
83
+ async clear() {
84
+ await this.init();
85
+ return this._writeJSON(this._filepath, {});
86
+ }
87
+ _writeJSON = (filepath, data) => {
88
+ const fileContent = JSON.stringify(data, null, 2);
89
+ return import_fs.default.promises.writeFile(filepath, fileContent);
90
+ };
91
+ _readJSON = async (filepath) => {
92
+ const fileContent = await import_fs.default.promises.readFile(filepath, "utf8");
93
+ return JSON.parse(fileContent);
94
+ };
95
+ }
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ FSKeyValueCache
99
+ });