@botpress/cli 4.17.13 → 4.17.15

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 (305) hide show
  1. package/.turbo/turbo-build.log +16 -12
  2. package/bin.js +1 -1
  3. package/dist/api/bot-body.d.ts +5 -0
  4. package/dist/api/client.d.ts +50 -0
  5. package/dist/api/client.js +2 -1
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/index.d.ts +6 -0
  8. package/dist/api/index.js +9 -0
  9. package/dist/api/integration-body.d.ts +5 -0
  10. package/dist/api/interface-body.d.ts +7 -0
  11. package/dist/api/paging.d.ts +9 -0
  12. package/dist/api/plugin-body.d.ts +5 -0
  13. package/dist/api/retry.d.ts +2 -0
  14. package/dist/api/types.d.ts +62 -0
  15. package/dist/chat/index.d.ts +25 -0
  16. package/dist/chat/index.js +1 -1
  17. package/dist/chat/index.js.map +1 -1
  18. package/dist/cli.d.ts +1 -0
  19. package/dist/cli.js +51 -0
  20. package/dist/cli.js.map +7 -0
  21. package/dist/code-generation/bot-implementation/bot-implementation.d.ts +8 -0
  22. package/dist/code-generation/bot-implementation/bot-implementation.js.map +1 -1
  23. package/dist/code-generation/bot-implementation/bot-plugins/index.d.ts +7 -0
  24. package/dist/code-generation/bot-implementation/bot-plugins/index.js.map +1 -1
  25. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.d.ts +13 -0
  26. package/dist/code-generation/bot-implementation/bot-plugins/plugin-module.js.map +1 -1
  27. package/dist/code-generation/bot-implementation/bot-typings/actions-module.d.ts +21 -0
  28. package/dist/code-generation/bot-implementation/bot-typings/actions-module.js.map +1 -1
  29. package/dist/code-generation/bot-implementation/bot-typings/events-module.d.ts +10 -0
  30. package/dist/code-generation/bot-implementation/bot-typings/events-module.js.map +1 -1
  31. package/dist/code-generation/bot-implementation/bot-typings/index.d.ts +7 -0
  32. package/dist/code-generation/bot-implementation/bot-typings/index.js.map +1 -1
  33. package/dist/code-generation/bot-implementation/bot-typings/states-module.d.ts +17 -0
  34. package/dist/code-generation/bot-implementation/bot-typings/states-module.js.map +1 -1
  35. package/dist/code-generation/bot-implementation/bot-typings/tables-module.d.ts +10 -0
  36. package/dist/code-generation/bot-implementation/bot-typings/tables-module.js.map +1 -1
  37. package/dist/code-generation/bot-implementation/bot-typings/workflows-module.d.ts +27 -0
  38. package/dist/code-generation/bot-implementation/bot-typings/workflows-module.js.map +1 -1
  39. package/dist/code-generation/bot-implementation/index.d.ts +3 -0
  40. package/dist/code-generation/bot-implementation/index.js.map +1 -1
  41. package/dist/code-generation/consts.d.ts +5 -0
  42. package/dist/code-generation/consts.js +2 -1
  43. package/dist/code-generation/generators.d.ts +10 -0
  44. package/dist/code-generation/generators.js.map +1 -1
  45. package/dist/code-generation/index.d.ts +8 -0
  46. package/dist/code-generation/index.js +2 -1
  47. package/dist/code-generation/integration-implementation/index.d.ts +3 -0
  48. package/dist/code-generation/integration-implementation/index.js.map +1 -1
  49. package/dist/code-generation/integration-implementation/integration-implementation.d.ts +7 -0
  50. package/dist/code-generation/integration-implementation/integration-implementation.js.map +1 -1
  51. package/dist/code-generation/integration-implementation/integration-secret.d.ts +8 -0
  52. package/dist/code-generation/integration-implementation/integration-secret.js.map +1 -1
  53. package/dist/code-generation/integration-implementation/integration-typings/actions-module.d.ts +21 -0
  54. package/dist/code-generation/integration-implementation/integration-typings/actions-module.js.map +1 -1
  55. package/dist/code-generation/integration-implementation/integration-typings/channels-module.d.ts +5 -0
  56. package/dist/code-generation/integration-implementation/integration-typings/channels-module.js.map +1 -1
  57. package/dist/code-generation/integration-implementation/integration-typings/configuration-module.d.ts +7 -0
  58. package/dist/code-generation/integration-implementation/integration-typings/configurations-module.d.ts +10 -0
  59. package/dist/code-generation/integration-implementation/integration-typings/configurations-module.js.map +1 -1
  60. package/dist/code-generation/integration-implementation/integration-typings/entities-module.d.ts +10 -0
  61. package/dist/code-generation/integration-implementation/integration-typings/entities-module.js.map +1 -1
  62. package/dist/code-generation/integration-implementation/integration-typings/events-module.d.ts +10 -0
  63. package/dist/code-generation/integration-implementation/integration-typings/events-module.js.map +1 -1
  64. package/dist/code-generation/integration-implementation/integration-typings/index.d.ts +8 -0
  65. package/dist/code-generation/integration-implementation/integration-typings/index.js.map +1 -1
  66. package/dist/code-generation/integration-implementation/integration-typings/states-module.d.ts +17 -0
  67. package/dist/code-generation/integration-implementation/integration-typings/states-module.js.map +1 -1
  68. package/dist/code-generation/integration-package/index.d.ts +2 -0
  69. package/dist/code-generation/integration-package/index.js.map +1 -1
  70. package/dist/code-generation/integration-package/integration-package-definition/actions-module.d.ts +21 -0
  71. package/dist/code-generation/integration-package/integration-package-definition/actions-module.js.map +1 -1
  72. package/dist/code-generation/integration-package/integration-package-definition/channels-module.d.ts +5 -0
  73. package/dist/code-generation/integration-package/integration-package-definition/channels-module.js.map +1 -1
  74. package/dist/code-generation/integration-package/integration-package-definition/configuration-module.d.ts +7 -0
  75. package/dist/code-generation/integration-package/integration-package-definition/configurations-module.d.ts +10 -0
  76. package/dist/code-generation/integration-package/integration-package-definition/configurations-module.js.map +1 -1
  77. package/dist/code-generation/integration-package/integration-package-definition/entities-module.d.ts +10 -0
  78. package/dist/code-generation/integration-package/integration-package-definition/entities-module.js.map +1 -1
  79. package/dist/code-generation/integration-package/integration-package-definition/events-module.d.ts +10 -0
  80. package/dist/code-generation/integration-package/integration-package-definition/events-module.js.map +1 -1
  81. package/dist/code-generation/integration-package/integration-package-definition/index.d.ts +8 -0
  82. package/dist/code-generation/integration-package/integration-package-definition/index.js.map +1 -1
  83. package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.d.ts +10 -0
  84. package/dist/code-generation/integration-package/integration-package-definition/interfaces-module.js.map +1 -1
  85. package/dist/code-generation/integration-package/integration-package-definition/states-module.d.ts +10 -0
  86. package/dist/code-generation/integration-package/integration-package-definition/states-module.js.map +1 -1
  87. package/dist/code-generation/integration-package/integration-package-definition/typings.d.ts +10 -0
  88. package/dist/code-generation/interface-implementation/index.d.ts +4 -0
  89. package/dist/code-generation/interface-implementation/integration-typings/actions-module.d.ts +21 -0
  90. package/dist/code-generation/interface-implementation/integration-typings/actions-module.js.map +1 -1
  91. package/dist/code-generation/interface-implementation/integration-typings/channels-module.d.ts +5 -0
  92. package/dist/code-generation/interface-implementation/integration-typings/channels-module.js.map +1 -1
  93. package/dist/code-generation/interface-implementation/integration-typings/entities-module.d.ts +10 -0
  94. package/dist/code-generation/interface-implementation/integration-typings/entities-module.js.map +1 -1
  95. package/dist/code-generation/interface-implementation/integration-typings/events-module.d.ts +10 -0
  96. package/dist/code-generation/interface-implementation/integration-typings/events-module.js.map +1 -1
  97. package/dist/code-generation/interface-implementation/integration-typings/index.d.ts +8 -0
  98. package/dist/code-generation/interface-implementation/integration-typings/index.js.map +1 -1
  99. package/dist/code-generation/interface-package/index.d.ts +2 -0
  100. package/dist/code-generation/interface-package/index.js.map +1 -1
  101. package/dist/code-generation/interface-package/interface-package-definition/actions-module.d.ts +21 -0
  102. package/dist/code-generation/interface-package/interface-package-definition/actions-module.js.map +1 -1
  103. package/dist/code-generation/interface-package/interface-package-definition/channels-module.d.ts +5 -0
  104. package/dist/code-generation/interface-package/interface-package-definition/channels-module.js.map +1 -1
  105. package/dist/code-generation/interface-package/interface-package-definition/entities-module.d.ts +10 -0
  106. package/dist/code-generation/interface-package/interface-package-definition/entities-module.js.map +1 -1
  107. package/dist/code-generation/interface-package/interface-package-definition/events-module.d.ts +10 -0
  108. package/dist/code-generation/interface-package/interface-package-definition/events-module.js.map +1 -1
  109. package/dist/code-generation/interface-package/interface-package-definition/index.d.ts +8 -0
  110. package/dist/code-generation/interface-package/interface-package-definition/index.js.map +1 -1
  111. package/dist/code-generation/interface-package/interface-package-definition/typings.d.ts +7 -0
  112. package/dist/code-generation/module.d.ts +49 -0
  113. package/dist/code-generation/module.js +2 -2
  114. package/dist/code-generation/module.js.map +2 -2
  115. package/dist/code-generation/plugin-implementation/index.d.ts +3 -0
  116. package/dist/code-generation/plugin-implementation/index.js.map +1 -1
  117. package/dist/code-generation/plugin-implementation/plugin-implementation.d.ts +7 -0
  118. package/dist/code-generation/plugin-implementation/plugin-implementation.js.map +1 -1
  119. package/dist/code-generation/plugin-implementation/plugin-typings/actions-module.d.ts +21 -0
  120. package/dist/code-generation/plugin-implementation/plugin-typings/actions-module.js.map +1 -1
  121. package/dist/code-generation/plugin-implementation/plugin-typings/configuration-module.d.ts +7 -0
  122. package/dist/code-generation/plugin-implementation/plugin-typings/events-module.d.ts +10 -0
  123. package/dist/code-generation/plugin-implementation/plugin-typings/events-module.js.map +1 -1
  124. package/dist/code-generation/plugin-implementation/plugin-typings/index.d.ts +8 -0
  125. package/dist/code-generation/plugin-implementation/plugin-typings/index.js.map +1 -1
  126. package/dist/code-generation/plugin-implementation/plugin-typings/states-module.d.ts +17 -0
  127. package/dist/code-generation/plugin-implementation/plugin-typings/states-module.js.map +1 -1
  128. package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.d.ts +10 -0
  129. package/dist/code-generation/plugin-implementation/plugin-typings/tables-module.js.map +1 -1
  130. package/dist/code-generation/plugin-implementation/plugin-typings/workflows-module.d.ts +27 -0
  131. package/dist/code-generation/plugin-implementation/plugin-typings/workflows-module.js.map +1 -1
  132. package/dist/code-generation/plugin-package/index.d.ts +2 -0
  133. package/dist/code-generation/plugin-package/index.js.map +1 -1
  134. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.d.ts +21 -0
  135. package/dist/code-generation/plugin-package/plugin-package-definition/actions-module.js.map +1 -1
  136. package/dist/code-generation/plugin-package/plugin-package-definition/configuration-module.d.ts +7 -0
  137. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.d.ts +10 -0
  138. package/dist/code-generation/plugin-package/plugin-package-definition/events-module.js.map +1 -1
  139. package/dist/code-generation/plugin-package/plugin-package-definition/index.d.ts +8 -0
  140. package/dist/code-generation/plugin-package/plugin-package-definition/index.js.map +1 -1
  141. package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.d.ts +7 -0
  142. package/dist/code-generation/plugin-package/plugin-package-definition/interfaces-module.js.map +1 -1
  143. package/dist/code-generation/plugin-package/plugin-package-definition/recurring-events-module.d.ts +5 -0
  144. package/dist/code-generation/plugin-package/plugin-package-definition/recurring-events-module.js.map +1 -1
  145. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.d.ts +10 -0
  146. package/dist/code-generation/plugin-package/plugin-package-definition/states-module.js.map +1 -1
  147. package/dist/code-generation/plugin-package/plugin-package-definition/typings.d.ts +7 -0
  148. package/dist/code-generation/strings.d.ts +4 -0
  149. package/dist/code-generation/strings.js.map +1 -1
  150. package/dist/code-generation/typings.d.ts +162 -0
  151. package/dist/code-generation/typings.test.d.ts +1 -0
  152. package/dist/command-definitions.d.ts +1480 -0
  153. package/dist/command-definitions.js +0 -2
  154. package/dist/command-implementations/add-command.d.ts +15 -0
  155. package/dist/command-implementations/add-command.js.map +1 -1
  156. package/dist/command-implementations/base-command.d.ts +13 -0
  157. package/dist/command-implementations/base-command.js.map +1 -1
  158. package/dist/command-implementations/bot-commands.d.ts +20 -0
  159. package/dist/command-implementations/bot-commands.js.map +1 -1
  160. package/dist/command-implementations/build-command.d.ts +9 -0
  161. package/dist/command-implementations/build-command.js +4 -4
  162. package/dist/command-implementations/build-command.js.map +2 -2
  163. package/dist/command-implementations/bundle-command.d.ts +10 -0
  164. package/dist/command-implementations/bundle-command.js +8 -7
  165. package/dist/command-implementations/bundle-command.js.map +2 -2
  166. package/dist/command-implementations/chat-command.d.ts +13 -0
  167. package/dist/command-implementations/chat-command.js.map +1 -1
  168. package/dist/command-implementations/deploy-command.d.ts +18 -0
  169. package/dist/command-implementations/deploy-command.js +1 -2
  170. package/dist/command-implementations/deploy-command.js.map +1 -1
  171. package/dist/command-implementations/dev-command.d.ts +21 -0
  172. package/dist/command-implementations/dev-command.js +6 -1
  173. package/dist/command-implementations/dev-command.js.map +2 -2
  174. package/dist/command-implementations/gen-command.d.ts +11 -0
  175. package/dist/command-implementations/gen-command.js.map +1 -1
  176. package/dist/command-implementations/global-command.d.ts +57 -0
  177. package/dist/command-implementations/global-command.js.map +1 -1
  178. package/dist/command-implementations/index.d.ts +1534 -0
  179. package/dist/command-implementations/index.js +0 -2
  180. package/dist/command-implementations/init-command.d.ts +17 -0
  181. package/dist/command-implementations/init-command.js.map +1 -1
  182. package/dist/command-implementations/integration-commands.d.ts +15 -0
  183. package/dist/command-implementations/integration-commands.js.map +1 -1
  184. package/dist/command-implementations/interface-commands.d.ts +14 -0
  185. package/dist/command-implementations/interface-commands.js.map +1 -1
  186. package/dist/command-implementations/lint-command.d.ts +15 -0
  187. package/dist/command-implementations/login-command.d.ts +6 -0
  188. package/dist/command-implementations/login-command.js +1 -2
  189. package/dist/command-implementations/login-command.js.map +1 -1
  190. package/dist/command-implementations/logout-command.d.ts +6 -0
  191. package/dist/command-implementations/plugin-commands.d.ts +14 -0
  192. package/dist/command-implementations/plugin-commands.js.map +1 -1
  193. package/dist/command-implementations/profile-commands.d.ts +14 -0
  194. package/dist/command-implementations/profile-commands.js +1 -2
  195. package/dist/command-implementations/profile-commands.js.map +1 -1
  196. package/dist/command-implementations/project-command.d.ts +67 -0
  197. package/dist/command-implementations/project-command.js.map +1 -1
  198. package/dist/command-implementations/read-command.d.ts +10 -0
  199. package/dist/command-implementations/serve-command.d.ts +6 -0
  200. package/dist/command-implementations/serve-command.js.map +1 -1
  201. package/dist/command-tree.d.ts +39 -0
  202. package/dist/config.d.ts +1441 -0
  203. package/dist/consts.d.ts +41 -0
  204. package/dist/errors.d.ts +56 -0
  205. package/dist/errors.js.map +1 -1
  206. package/dist/index.d.ts +1524 -0
  207. package/dist/index.js +50 -25
  208. package/dist/index.js.map +3 -3
  209. package/dist/init.d.ts +1 -0
  210. package/dist/linter/base-linter.d.ts +21 -0
  211. package/dist/linter/base-linter.js.map +1 -1
  212. package/dist/linter/base-linter.test.d.ts +1 -0
  213. package/dist/linter/base-linter.test.js +4 -4
  214. package/dist/linter/base-linter.test.js.map +1 -1
  215. package/dist/linter/bot-linter.d.ts +5 -0
  216. package/dist/linter/integration-linter.d.ts +7 -0
  217. package/dist/linter/interface-linter.d.ts +5 -0
  218. package/dist/linter/ruleset-tests/bot.ruleset.test.d.ts +1 -0
  219. package/dist/linter/ruleset-tests/common.d.ts +9 -0
  220. package/dist/linter/ruleset-tests/integration.ruleset.test.d.ts +1 -0
  221. package/dist/linter/ruleset-tests/interface.ruleset.test.d.ts +1 -0
  222. package/dist/linter/rulesets/bot.ruleset.d.ts +165 -0
  223. package/dist/linter/rulesets/bot.ruleset.js.map +1 -1
  224. package/dist/linter/rulesets/integration.ruleset.d.ts +390 -0
  225. package/dist/linter/rulesets/integration.ruleset.js.map +1 -1
  226. package/dist/linter/rulesets/interface.ruleset.d.ts +141 -0
  227. package/dist/linter/rulesets/interface.ruleset.js.map +1 -1
  228. package/dist/linter/spectral-functions.d.ts +11 -0
  229. package/dist/logger/base-logger.d.ts +43 -0
  230. package/dist/logger/base-logger.js.map +1 -1
  231. package/dist/logger/index.d.ts +22 -0
  232. package/dist/logger/index.js.map +1 -1
  233. package/dist/logger/logger.test.d.ts +1 -0
  234. package/dist/package-ref.d.ts +22 -0
  235. package/dist/package-ref.js.map +1 -1
  236. package/dist/package-ref.test.d.ts +1 -0
  237. package/dist/package-ref.test.js.map +1 -1
  238. package/dist/project-templates.d.ts +42 -0
  239. package/dist/register-yargs.d.ts +4 -0
  240. package/dist/register-yargs.js.map +1 -1
  241. package/dist/root.d.ts +7 -0
  242. package/dist/sdk/index.d.ts +2 -0
  243. package/dist/sdk/index.js +5 -0
  244. package/dist/sdk/validate-bot.d.ts +2 -0
  245. package/dist/sdk/validate-bot.js.map +1 -1
  246. package/dist/sdk/validate-bot.test.d.ts +1 -0
  247. package/dist/sdk/validate-integration.d.ts +2 -0
  248. package/dist/sdk/validate-integration.js.map +1 -1
  249. package/dist/tables/index.d.ts +1 -0
  250. package/dist/tables/schemas.d.ts +1259 -0
  251. package/dist/tables/tables-publisher.d.ts +22 -0
  252. package/dist/tables/tables-publisher.js.map +1 -1
  253. package/dist/typings.d.ts +27 -0
  254. package/dist/utils/attribute-utils.d.ts +10 -0
  255. package/dist/utils/cache-utils.d.ts +14 -0
  256. package/dist/utils/case-utils.d.ts +14 -0
  257. package/dist/utils/case-utils.test.d.ts +1 -0
  258. package/dist/utils/case-utils.test.js.map +1 -1
  259. package/dist/utils/concurrency-utils.d.ts +1 -0
  260. package/dist/utils/concurrency-utils.test.d.ts +1 -0
  261. package/dist/utils/esbuild-utils.d.ts +29 -0
  262. package/dist/utils/esbuild-utils.js +32 -1
  263. package/dist/utils/esbuild-utils.js.map +3 -3
  264. package/dist/utils/event-emitter.d.ts +7 -0
  265. package/dist/utils/file-watcher.d.ts +17 -0
  266. package/dist/utils/file-watcher.js.map +1 -1
  267. package/dist/utils/guard-utils.d.ts +4 -0
  268. package/dist/utils/id-utils.d.ts +2 -0
  269. package/dist/utils/index.d.ts +22 -0
  270. package/dist/utils/object-utils.d.ts +1 -0
  271. package/dist/utils/path-utils.d.ts +28 -0
  272. package/dist/utils/path-utils.test.d.ts +1 -0
  273. package/dist/utils/pkgjson-utils.d.ts +17 -0
  274. package/dist/utils/promise-utils.d.ts +2 -0
  275. package/dist/utils/promise-utils.test.d.ts +1 -0
  276. package/dist/utils/prompt-utils.d.ts +33 -0
  277. package/dist/utils/prompt-utils.js.map +1 -1
  278. package/dist/utils/record-utils.d.ts +8 -0
  279. package/dist/utils/record-utils.test.d.ts +1 -0
  280. package/dist/utils/require-utils.d.ts +2 -0
  281. package/dist/utils/require-utils.js.map +1 -1
  282. package/dist/utils/require-utils.test.d.ts +1 -0
  283. package/dist/utils/require-utils.test.js.map +1 -1
  284. package/dist/utils/schema-utils.d.ts +13 -0
  285. package/dist/utils/schema-utils.test.d.ts +1 -0
  286. package/dist/utils/semver-utils.d.ts +8 -0
  287. package/dist/utils/string-utils.d.ts +2 -0
  288. package/dist/utils/template-utils.d.ts +1 -0
  289. package/dist/utils/tunnel-utils.d.ts +49 -0
  290. package/dist/utils/tunnel-utils.js.map +1 -1
  291. package/dist/utils/type-utils.d.ts +19 -0
  292. package/dist/utils/url-utils.d.ts +19 -0
  293. package/dist/utils/url-utils.js.map +1 -1
  294. package/dist/worker/child-entrypoint.d.ts +1 -0
  295. package/dist/worker/child-entrypoint.js.map +1 -1
  296. package/dist/worker/child-wrapper.d.ts +18 -0
  297. package/dist/worker/child-wrapper.js.map +1 -1
  298. package/dist/worker/config.d.ts +28 -0
  299. package/dist/worker/index.d.ts +2 -0
  300. package/dist/worker/is-child.d.ts +14 -0
  301. package/dist/worker/is-child.js.map +1 -1
  302. package/dist/worker/worker-state.d.ts +30 -0
  303. package/dist/worker/worker.d.ts +20 -0
  304. package/package.json +7 -5
  305. package/tsconfig.build.json +14 -0
@@ -0,0 +1,22 @@
1
+ import * as sdk from '@botpress/sdk';
2
+ import * as apiUtils from '../api';
3
+ import * as logger from '../logger';
4
+ import * as utils from '../utils';
5
+ export declare class TablesPublisher {
6
+ private readonly _api;
7
+ private readonly _logger;
8
+ private readonly _prompt;
9
+ constructor({ api, logger, prompt, }: {
10
+ api: apiUtils.ApiClient;
11
+ logger: logger.Logger;
12
+ prompt: utils.prompt.CLIPrompt;
13
+ });
14
+ deployTables({ botId, botDefinition }: {
15
+ botId: string;
16
+ botDefinition: sdk.BotDefinition;
17
+ }): Promise<void>;
18
+ private _deployExistingTable;
19
+ private _parseTableColumns;
20
+ private _warnAndConfirm;
21
+ private _deployNewTable;
22
+ }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/tables/tables-publisher.ts"],
4
4
  "sourcesContent": ["import * as sdk from '@botpress/sdk'\nimport * as apiUtils from '../api'\nimport * as errors from '../errors'\nimport * as logger from '../logger'\nimport * as utils from '../utils'\nimport * as schemas from './schemas'\n\nexport class TablesPublisher {\n private readonly _api: apiUtils.ApiClient\n private readonly _logger: logger.Logger\n private readonly _prompt: utils.prompt.CLIPrompt\n\n public constructor({\n api,\n logger,\n prompt,\n }: {\n api: apiUtils.ApiClient\n logger: logger.Logger\n prompt: utils.prompt.CLIPrompt\n }) {\n this._api = api\n this._logger = logger\n this._prompt = prompt\n }\n\n public async deployTables({ botId, botDefinition }: { botId: string; botDefinition: sdk.BotDefinition }) {\n const api = this._api.switchBot(botId)\n\n this._logger.log('Synchronizing tables...')\n\n const tablesFromBotDef = Object.entries(botDefinition.tables ?? {})\n const listTableResult = await api.safeListTables({})\n\n if (!listTableResult.success) {\n this._logger.warn('Tables API is not available, skipping table deployment.')\n return\n }\n\n const { tables: existingTables } = listTableResult\n for (const [tableName, tableDef] of tablesFromBotDef) {\n const existingTable = existingTables.find((t) => t.name === tableName)\n\n this._logger.log(`Deploying table \"${tableName}\"...`)\n\n if (existingTable) {\n await this._deployExistingTable({ api, existingTable, updatedTableDef: tableDef })\n } else {\n await this._deployNewTable({ api, tableName, tableDef })\n }\n }\n\n for (const existingTable of existingTables) {\n if (!tablesFromBotDef.find(([tableName]) => tableName === existingTable.name)) {\n this._logger.log(\n `Table \"${existingTable.name}\" was previously defined but is not present in your bot definition. ` +\n 'This table will be ignored. ' +\n 'If you wish to delete this table, you may do so from the studio.'\n )\n }\n }\n }\n\n private async _deployExistingTable({\n api,\n existingTable,\n updatedTableDef,\n }: {\n api: apiUtils.ApiClient\n existingTable: Awaited<ReturnType<apiUtils.ApiClient['client']['listTables']>>['tables'][number]\n updatedTableDef: sdk.BotTableDefinition\n }) {\n if (existingTable.frozen) {\n this._logger.warn(`Table \"${existingTable.name}\" is frozen and will not be updated.`)\n return\n }\n\n const existingColumns = existingTable.schema.properties\n const updatedColumns = await this._parseTableColumns({ tableName: existingTable.name, tableDef: updatedTableDef })\n\n for (const [columnName, existingColumn] of Object.entries(existingColumns)) {\n const updatedColumn = updatedColumns[columnName]\n\n if (!updatedColumn) {\n const wishToContinue = await this._warnAndConfirm(\n `Column \"${columnName}\" is missing from the schema of table \"${existingTable.name}\" in your bot definition. ` +\n 'If you are attempting to rename this column, please do so from the studio. ' +\n 'Renaming a column in your bot definition will cause a new column to be created. ' +\n 'If this is not a rename and you wish to proceed, the old column will be kept unchanged. ' +\n 'You can delete columns from the studio if you no longer need them.'\n )\n\n // TODO: ask the user whether this is a rename. If it is a rename, list\n // all other columns and ask which one has the new name, then do\n // the rename operation with client.renameTableColumn()\n\n if (!wishToContinue) {\n return\n }\n }\n\n if (updatedColumn && existingColumn.type !== updatedColumn.type) {\n const wishToContinue = await this._warnAndConfirm(\n 'DATA LOSS WARNING: ' +\n `Type of column \"${columnName}\" has changed from \"${existingColumn.type}\" to \"${updatedColumn.type}\" in table \"${existingTable.name}\". ` +\n 'If you proceed, the value of this column will be reset to NULL for all rows in the table.'\n )\n\n if (!wishToContinue) {\n return\n }\n }\n }\n\n await api.client.updateTable({\n table: existingTable.name,\n schema: sdk.transforms.toJSONSchemaLegacy(updatedTableDef.schema),\n frozen: updatedTableDef.frozen,\n tags: updatedTableDef.tags,\n isComputeEnabled: updatedTableDef.isComputeEnabled,\n })\n\n this._logger.success(`Table \"${existingTable.name}\" has been updated`)\n }\n\n private async _parseTableColumns({\n tableName,\n tableDef,\n }: {\n tableName: string\n tableDef: sdk.BotTableDefinition\n }): Promise<Record<string, sdk.z.infer<typeof schemas.columnSchema>>> {\n const columns = sdk.transforms.toJSONSchemaLegacy(tableDef.schema).properties!\n\n const validColumns = await Promise.all(\n Object.entries(columns).map(async ([columnName, columnSchema]) => {\n const validatedSchema = await schemas.columnSchema.safeParseAsync(columnSchema)\n\n if (!validatedSchema.success) {\n throw new errors.BotpressCLIError(\n `Column \"${columnName}\" in table \"${tableName}\" has an invalid schema: ${validatedSchema.error.message}`\n )\n }\n\n return [columnName, validatedSchema.data] as const\n })\n )\n\n return Object.fromEntries(validColumns)\n }\n\n private async _warnAndConfirm(warningMessage: string, confirmMessage: string = 'Are you sure you want to continue?') {\n this._logger.warn(warningMessage)\n\n const confirm = await this._prompt.confirm(confirmMessage)\n\n if (!confirm) {\n this._logger.log('Aborted')\n return false\n }\n return true\n }\n\n private async _deployNewTable({\n api,\n tableName,\n tableDef,\n }: {\n api: apiUtils.ApiClient\n tableName: string\n tableDef: sdk.BotTableDefinition\n }) {\n await api.client.createTable({\n name: tableName,\n schema: sdk.transforms.toJSONSchemaLegacy(tableDef.schema),\n frozen: tableDef.frozen,\n tags: tableDef.tags,\n factor: tableDef.factor,\n isComputeEnabled: tableDef.isComputeEnabled,\n })\n\n this._logger.success(`Table \"${tableName}\" has been created`)\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["logger"]
7
7
  }
@@ -0,0 +1,27 @@
1
+ import type { default as yargs, YargsConfig, YargsSchema } from '@bpinternal/yargs-extra';
2
+ export type CommandPositionalOption = yargs.PositionalOptions & {
3
+ positional: true;
4
+ idx: number;
5
+ };
6
+ export type CommandNamedOption = YargsSchema[string] & {
7
+ positional?: false;
8
+ };
9
+ export type CommandOption = CommandPositionalOption | CommandNamedOption;
10
+ export type CommandSchema = Record<string, CommandOption>;
11
+ export type CommandArgv<C extends CommandDefinition = CommandDefinition> = YargsConfig<C['schema']> & {
12
+ /**
13
+ * Ignored: fixes weird typing issue
14
+ */
15
+ _?: string;
16
+ };
17
+ export type CommandDefinition<S extends CommandSchema = CommandSchema> = {
18
+ schema: S;
19
+ description?: string;
20
+ alias?: string;
21
+ };
22
+ export type CommandImplementation<C extends CommandDefinition = CommandDefinition> = (argv: CommandArgv<C>) => Promise<{
23
+ exitCode: number;
24
+ }>;
25
+ export type CommandLeaf<C extends CommandDefinition = CommandDefinition> = C & {
26
+ handler: CommandImplementation<C>;
27
+ };
@@ -0,0 +1,10 @@
1
+ type ItemsWithAttributes = Record<string, {
2
+ attributes?: {
3
+ [key: string]: string | null;
4
+ };
5
+ } | null>;
6
+ export declare const prepareAttributeUpdateBody: <TLocalItems extends ItemsWithAttributes>({ localItems, remoteItems, }: {
7
+ localItems: TLocalItems;
8
+ remoteItems: ItemsWithAttributes;
9
+ }) => TLocalItems;
10
+ export {};
@@ -0,0 +1,14 @@
1
+ export declare class FSKeyValueCache<T extends Object> {
2
+ private _filepath;
3
+ private _initialized;
4
+ constructor(_filepath: string);
5
+ init(): Promise<void>;
6
+ sync<K extends keyof T>(key: K, value: T[K] | undefined, prompt: (initial?: T[K]) => Promise<T[K]>): Promise<T[K]>;
7
+ has<K extends keyof T>(key: K): Promise<boolean>;
8
+ get<K extends keyof T>(key: K): Promise<T[K] | undefined>;
9
+ set<K extends keyof T>(key: K, value: T[K]): Promise<void>;
10
+ rm<K extends keyof T>(key: K): Promise<void>;
11
+ clear(): Promise<void>;
12
+ private _writeJSON;
13
+ private _readJSON;
14
+ }
@@ -0,0 +1,14 @@
1
+ export declare const to: {
2
+ pascalCase: (text: string) => string;
3
+ kebabCase: (text: string) => string;
4
+ snakeCase: (text: string) => string;
5
+ screamingSnakeCase: (text: string) => string;
6
+ camelCase: (text: string) => string;
7
+ };
8
+ export declare const is: {
9
+ pascalCase: (text: string) => boolean;
10
+ kebabCase: (text: string) => boolean;
11
+ snakeCase: (text: string) => boolean;
12
+ screamingSnakeCase: (text: string) => boolean;
13
+ camelCase: (text: string) => boolean;
14
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/case-utils.test.ts"],
4
4
  "sourcesContent": ["import { test, expect } from 'vitest'\nimport * as caseUtils from './case-utils'\n\nconst pascalCase = 'HelloLittleWorld'\nconst kebabCase = 'hello-little-world'\nconst snakeCase = 'hello_little_world'\nconst screamingSnakeCase = 'HELLO_LITTLE_WORLD'\nconst camelCase = 'helloLittleWorld'\n\ntest('case utils should convert from pascal case to all other cases', () => {\n expect(caseUtils.to.kebabCase(pascalCase)).toBe(kebabCase)\n expect(caseUtils.to.snakeCase(pascalCase)).toBe(snakeCase)\n expect(caseUtils.to.screamingSnakeCase(pascalCase)).toBe(screamingSnakeCase)\n expect(caseUtils.to.camelCase(pascalCase)).toBe(camelCase)\n})\n\ntest('case utils should convert from kebab case to all other cases', () => {\n expect(caseUtils.to.pascalCase(kebabCase)).toBe(pascalCase)\n expect(caseUtils.to.snakeCase(kebabCase)).toBe(snakeCase)\n expect(caseUtils.to.screamingSnakeCase(kebabCase)).toBe(screamingSnakeCase)\n expect(caseUtils.to.camelCase(kebabCase)).toBe(camelCase)\n})\n\ntest('case utils should convert from snake case to all other cases', () => {\n expect(caseUtils.to.pascalCase(snakeCase)).toBe(pascalCase)\n expect(caseUtils.to.kebabCase(snakeCase)).toBe(kebabCase)\n expect(caseUtils.to.screamingSnakeCase(snakeCase)).toBe(screamingSnakeCase)\n expect(caseUtils.to.camelCase(snakeCase)).toBe(camelCase)\n})\n\ntest('case utils should convert from screaming snake case to all other cases', () => {\n expect(caseUtils.to.pascalCase(screamingSnakeCase)).toBe(pascalCase)\n expect(caseUtils.to.kebabCase(screamingSnakeCase)).toBe(kebabCase)\n expect(caseUtils.to.snakeCase(screamingSnakeCase)).toBe(snakeCase)\n expect(caseUtils.to.camelCase(screamingSnakeCase)).toBe(camelCase)\n})\n\ntest('case utils should convert from camel case to all other cases', () => {\n expect(caseUtils.to.pascalCase(camelCase)).toBe(pascalCase)\n expect(caseUtils.to.kebabCase(camelCase)).toBe(kebabCase)\n expect(caseUtils.to.snakeCase(camelCase)).toBe(snakeCase)\n expect(caseUtils.to.screamingSnakeCase(camelCase)).toBe(screamingSnakeCase)\n})\n\ntest('case utils should split special characters when converting', () => {\n expect(caseUtils.to.pascalCase(`${pascalCase}.2`)).toBe(`${pascalCase}2`)\n expect(caseUtils.to.kebabCase(`${kebabCase}.2`)).toBe(`${kebabCase}-2`)\n expect(caseUtils.to.snakeCase(`${snakeCase}.2`)).toBe(`${snakeCase}_2`)\n expect(caseUtils.to.screamingSnakeCase(`${screamingSnakeCase}.2`)).toBe(`${screamingSnakeCase}_2`)\n expect(caseUtils.to.camelCase(`${camelCase}.2`)).toBe(`${camelCase}2`)\n})\n\ntest('case utils should prevent special characters when checking', () => {\n expect(caseUtils.is.pascalCase(`${pascalCase}.2`)).toBe(false)\n expect(caseUtils.is.kebabCase(`${kebabCase}.2`)).toBe(false)\n expect(caseUtils.is.snakeCase(`${snakeCase}.2`)).toBe(false)\n expect(caseUtils.is.screamingSnakeCase(`${screamingSnakeCase}.2`)).toBe(false)\n expect(caseUtils.is.camelCase(`${camelCase}.2`)).toBe(false)\n})\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1 @@
1
+ export declare const debounceAsync: <TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => Promise<TReturn>, ms: number) => ((...args: TArgs) => Promise<TReturn>);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import * as esb from 'esbuild';
2
+ export * from 'esbuild';
3
+ type BaseProps = {
4
+ absWorkingDir: string;
5
+ };
6
+ export type BuildCodeProps = BaseProps & {
7
+ code: string;
8
+ outfile: string;
9
+ };
10
+ export type BuildEntrypointProps = BaseProps & {
11
+ entrypoint: string;
12
+ };
13
+ export declare class IncrementalBuildContext {
14
+ private _context;
15
+ private _previousProps;
16
+ private _previousOpts;
17
+ private _createContext;
18
+ rebuild(props: BuildCodeProps, opts?: esb.BuildOptions): Promise<void>;
19
+ }
20
+ /**
21
+ * Bundles a string of typescript code and writes the output to a file
22
+ */
23
+ export declare function buildCode(props: BuildCodeProps, opts?: esb.BuildOptions): Promise<esb.BuildResult>;
24
+ /**
25
+ * Bundles a typescript file and returns the output as a string
26
+ */
27
+ export declare function buildEntrypoint(props: BuildEntrypointProps, opts?: esb.BuildOptions): Promise<esb.BuildResult & {
28
+ outputFiles: esb.OutputFile[];
29
+ }>;
@@ -29,11 +29,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
30
  var esbuild_utils_exports = {};
31
31
  __export(esbuild_utils_exports, {
32
+ IncrementalBuildContext: () => IncrementalBuildContext,
32
33
  buildCode: () => buildCode,
33
34
  buildEntrypoint: () => buildEntrypoint
34
35
  });
35
36
  module.exports = __toCommonJS(esbuild_utils_exports);
36
37
  var esb = __toESM(require("esbuild"));
38
+ var import_lodash = __toESM(require("lodash"));
37
39
  __reExport(esbuild_utils_exports, require("esbuild"), module.exports);
38
40
  const DEFAULT_OPTIONS = {
39
41
  bundle: true,
@@ -47,6 +49,33 @@ const DEFAULT_OPTIONS = {
47
49
  // important : https://github.com/node-fetch/node-fetch/issues/784#issuecomment-1014768204
48
50
  minify: false
49
51
  };
52
+ class IncrementalBuildContext {
53
+ _context;
54
+ _previousProps;
55
+ _previousOpts = {};
56
+ _createContext(props, opts = {}) {
57
+ const { absWorkingDir, code, outfile } = props;
58
+ return esb.context({
59
+ ...DEFAULT_OPTIONS,
60
+ ...opts,
61
+ absWorkingDir,
62
+ outfile,
63
+ stdin: { contents: code, resolveDir: absWorkingDir, loader: "ts" },
64
+ write: true
65
+ });
66
+ }
67
+ async rebuild(props, opts = {}) {
68
+ if (!this._context || !import_lodash.default.isEqual(props, this._previousProps) || !import_lodash.default.isEqual(opts, this._previousOpts)) {
69
+ if (this._context) {
70
+ await this._context.dispose();
71
+ }
72
+ this._context = await this._createContext(props, opts);
73
+ this._previousOpts = opts;
74
+ this._previousProps = props;
75
+ }
76
+ await this._context?.rebuild();
77
+ }
78
+ }
50
79
  function buildCode(props, opts = {}) {
51
80
  const { absWorkingDir, code, outfile } = props;
52
81
  return esb.build({
@@ -71,7 +100,9 @@ function buildEntrypoint(props, opts = {}) {
71
100
  }
72
101
  // Annotate the CommonJS export names for ESM import in node:
73
102
  0 && (module.exports = {
103
+ IncrementalBuildContext,
74
104
  buildCode,
75
- buildEntrypoint
105
+ buildEntrypoint,
106
+ ...require("esbuild")
76
107
  });
77
108
  //# sourceMappingURL=esbuild-utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/esbuild-utils.ts"],
4
- "sourcesContent": ["import * as esb from 'esbuild'\n\nexport * from 'esbuild'\n\ntype BaseProps = {\n absWorkingDir: string\n}\n\nexport type BuildCodeProps = BaseProps & {\n code: string\n outfile: string\n}\n\nexport type BuildEntrypointProps = BaseProps & {\n entrypoint: string\n}\n\nconst DEFAULT_OPTIONS: esb.BuildOptions = {\n bundle: true,\n sourcemap: false,\n logLevel: 'silent',\n platform: 'node',\n target: 'es2020',\n legalComments: 'none',\n logOverride: { 'equals-negative-zero': 'silent' },\n keepNames: true, // important : https://github.com/node-fetch/node-fetch/issues/784#issuecomment-1014768204\n minify: false,\n}\n\n/**\n * Bundles a string of typescript code and writes the output to a file\n */\nexport function buildCode(props: BuildCodeProps, opts: esb.BuildOptions = {}): Promise<esb.BuildResult> {\n const { absWorkingDir, code, outfile } = props\n return esb.build({\n ...DEFAULT_OPTIONS,\n ...opts,\n absWorkingDir,\n outfile,\n stdin: { contents: code, resolveDir: absWorkingDir, loader: 'ts' },\n write: true,\n })\n}\n\n/**\n * Bundles a typescript file and returns the output as a string\n */\nexport function buildEntrypoint(\n props: BuildEntrypointProps,\n opts: esb.BuildOptions = {}\n): Promise<esb.BuildResult & { outputFiles: esb.OutputFile[] }> {\n const { absWorkingDir, entrypoint } = props\n return esb.build({\n ...DEFAULT_OPTIONS,\n ...opts,\n absWorkingDir,\n entryPoints: [entrypoint],\n outfile: undefined,\n write: false,\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAqB;AAErB,kCAAc,oBAFd;AAiBA,MAAM,kBAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,aAAa,EAAE,wBAAwB,SAAS;AAAA,EAChD,WAAW;AAAA;AAAA,EACX,QAAQ;AACV;AAKO,SAAS,UAAU,OAAuB,OAAyB,CAAC,GAA6B;AACtG,QAAM,EAAE,eAAe,MAAM,QAAQ,IAAI;AACzC,SAAO,IAAI,MAAM;AAAA,IACf,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA,OAAO,EAAE,UAAU,MAAM,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjE,OAAO;AAAA,EACT,CAAC;AACH;AAKO,SAAS,gBACd,OACA,OAAyB,CAAC,GACoC;AAC9D,QAAM,EAAE,eAAe,WAAW,IAAI;AACtC,SAAO,IAAI,MAAM;AAAA,IACf,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA,aAAa,CAAC,UAAU;AAAA,IACxB,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AACH;",
6
- "names": []
4
+ "sourcesContent": ["import * as esb from 'esbuild'\nimport _ from 'lodash'\n\nexport * from 'esbuild'\n\ntype BaseProps = {\n absWorkingDir: string\n}\n\nexport type BuildCodeProps = BaseProps & {\n code: string\n outfile: string\n}\n\nexport type BuildEntrypointProps = BaseProps & {\n entrypoint: string\n}\n\nconst DEFAULT_OPTIONS: esb.BuildOptions = {\n bundle: true,\n sourcemap: false,\n logLevel: 'silent',\n platform: 'node',\n target: 'es2020',\n legalComments: 'none',\n logOverride: { 'equals-negative-zero': 'silent' },\n keepNames: true, // important : https://github.com/node-fetch/node-fetch/issues/784#issuecomment-1014768204\n minify: false,\n}\n\nexport class IncrementalBuildContext {\n private _context: esb.BuildContext | undefined\n private _previousProps: BuildCodeProps | undefined\n private _previousOpts: esb.BuildOptions = {}\n\n private _createContext(props: BuildCodeProps, opts: esb.BuildOptions = {}): Promise<esb.BuildContext> {\n const { absWorkingDir, code, outfile } = props\n return esb.context({\n ...DEFAULT_OPTIONS,\n ...opts,\n absWorkingDir,\n outfile,\n stdin: { contents: code, resolveDir: absWorkingDir, loader: 'ts' },\n write: true,\n })\n }\n\n public async rebuild(props: BuildCodeProps, opts: esb.BuildOptions = {}) {\n if (!this._context || !_.isEqual(props, this._previousProps) || !_.isEqual(opts, this._previousOpts)) {\n if (this._context) {\n await this._context.dispose()\n }\n this._context = await this._createContext(props, opts)\n this._previousOpts = opts\n this._previousProps = props\n }\n await this._context?.rebuild()\n }\n}\n\n/**\n * Bundles a string of typescript code and writes the output to a file\n */\nexport function buildCode(props: BuildCodeProps, opts: esb.BuildOptions = {}): Promise<esb.BuildResult> {\n const { absWorkingDir, code, outfile } = props\n return esb.build({\n ...DEFAULT_OPTIONS,\n ...opts,\n absWorkingDir,\n outfile,\n stdin: { contents: code, resolveDir: absWorkingDir, loader: 'ts' },\n write: true,\n })\n}\n\n/**\n * Bundles a typescript file and returns the output as a string\n */\nexport function buildEntrypoint(\n props: BuildEntrypointProps,\n opts: esb.BuildOptions = {}\n): Promise<esb.BuildResult & { outputFiles: esb.OutputFile[] }> {\n const { absWorkingDir, entrypoint } = props\n return esb.build({\n ...DEFAULT_OPTIONS,\n ...opts,\n absWorkingDir,\n entryPoints: [entrypoint],\n outfile: undefined,\n write: false,\n })\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAqB;AACrB,oBAAc;AAEd,kCAAc,oBAHd;AAkBA,MAAM,kBAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,aAAa,EAAE,wBAAwB,SAAS;AAAA,EAChD,WAAW;AAAA;AAAA,EACX,QAAQ;AACV;AAEO,MAAM,wBAAwB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,gBAAkC,CAAC;AAAA,EAEnC,eAAe,OAAuB,OAAyB,CAAC,GAA8B;AACpG,UAAM,EAAE,eAAe,MAAM,QAAQ,IAAI;AACzC,WAAO,IAAI,QAAQ;AAAA,MACjB,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,OAAO,EAAE,UAAU,MAAM,YAAY,eAAe,QAAQ,KAAK;AAAA,MACjE,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,QAAQ,OAAuB,OAAyB,CAAC,GAAG;AACvE,QAAI,CAAC,KAAK,YAAY,CAAC,cAAAA,QAAE,QAAQ,OAAO,KAAK,cAAc,KAAK,CAAC,cAAAA,QAAE,QAAQ,MAAM,KAAK,aAAa,GAAG;AACpG,UAAI,KAAK,UAAU;AACjB,cAAM,KAAK,SAAS,QAAQ;AAAA,MAC9B;AACA,WAAK,WAAW,MAAM,KAAK,eAAe,OAAO,IAAI;AACrD,WAAK,gBAAgB;AACrB,WAAK,iBAAiB;AAAA,IACxB;AACA,UAAM,KAAK,UAAU,QAAQ;AAAA,EAC/B;AACF;AAKO,SAAS,UAAU,OAAuB,OAAyB,CAAC,GAA6B;AACtG,QAAM,EAAE,eAAe,MAAM,QAAQ,IAAI;AACzC,SAAO,IAAI,MAAM;AAAA,IACf,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA,OAAO,EAAE,UAAU,MAAM,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjE,OAAO;AAAA,EACT,CAAC;AACH;AAKO,SAAS,gBACd,OACA,OAAyB,CAAC,GACoC;AAC9D,QAAM,EAAE,eAAe,WAAW,IAAI;AACtC,SAAO,IAAI,MAAM;AAAA,IACf,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA,aAAa,CAAC,UAAU;AAAA,IACxB,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AACH;",
6
+ "names": ["_"]
7
7
  }
@@ -0,0 +1,7 @@
1
+ export declare class EventEmitter<E extends object> {
2
+ private _listeners;
3
+ emit<K extends keyof E>(type: K, event: E[K]): void;
4
+ once<K extends keyof E>(type: K, listener: (event: E[K]) => void): void;
5
+ on<K extends keyof E>(type: K, listener: (event: E[K]) => void): void;
6
+ off<K extends keyof E>(type: K, listener: (event: E[K]) => void): void;
7
+ }
@@ -0,0 +1,17 @@
1
+ import watcher from '@parcel/watcher';
2
+ export type FileChangeHandler = (events: watcher.Event[]) => Promise<void>;
3
+ type FileWatcherOptions = watcher.Options & {
4
+ debounceMs?: number;
5
+ };
6
+ /**
7
+ * Wraps the Parcel file watcher to ensure errors can be catched in an async/await fashion
8
+ */
9
+ export declare class FileWatcher {
10
+ private _subscription;
11
+ private _errorEmitter;
12
+ static watch(dir: string, fn: FileChangeHandler, opt?: FileWatcherOptions): Promise<FileWatcher>;
13
+ private constructor();
14
+ close(): Promise<void>;
15
+ wait: () => Promise<unknown>;
16
+ }
17
+ export {};
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/file-watcher.ts"],
4
4
  "sourcesContent": ["import watcher from '@parcel/watcher'\nimport { debounceAsync } from './concurrency-utils'\nimport { EventEmitter } from './event-emitter'\n\nexport type FileChangeHandler = (events: watcher.Event[]) => Promise<void>\n\ntype EmptyObject = Record<never, never>\ntype FileWatcherEvent = {\n error: unknown\n close: EmptyObject\n}\n\ntype FileWatcherOptions = watcher.Options & {\n debounceMs?: number\n}\n\n/**\n * Wraps the Parcel file watcher to ensure errors can be catched in an async/await fashion\n */\nexport class FileWatcher {\n public static async watch(dir: string, fn: FileChangeHandler, opt?: FileWatcherOptions) {\n const eventEmitter = new EventEmitter<FileWatcherEvent>()\n\n let subscriptionHandler = async (err: Error | null, events: watcher.Event[]) => {\n if (err) {\n eventEmitter.emit('error', err)\n return\n }\n\n try {\n await fn(events)\n } catch (thrown) {\n eventEmitter.emit('error', thrown)\n }\n }\n\n if (opt?.debounceMs) {\n subscriptionHandler = debounceAsync(subscriptionHandler, opt.debounceMs)\n }\n\n const subscription = await watcher.subscribe(dir, subscriptionHandler, opt)\n return new FileWatcher(subscription, eventEmitter)\n }\n\n private constructor(\n private _subscription: watcher.AsyncSubscription,\n private _errorEmitter: EventEmitter<FileWatcherEvent>\n ) {}\n\n public async close() {\n await this._subscription.unsubscribe()\n this._errorEmitter.emit('close', {})\n }\n\n public wait = () =>\n new Promise((resolve, reject) => {\n this._errorEmitter.once('error', reject)\n this._errorEmitter.once('close', resolve)\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,+BAA8B;AAC9B,2BAA6B;AAiBtB,MAAM,YAAY;AAAA,EAyBf,YACE,eACA,eACR;AAFQ;AACA;AAAA,EACP;AAAA,EA3BH,aAAoB,MAAM,KAAa,IAAuB,KAA0B;AACtF,UAAM,eAAe,IAAI,kCAA+B;AAExD,QAAI,sBAAsB,OAAO,KAAmB,WAA4B;AAC9E,UAAI,KAAK;AACP,qBAAa,KAAK,SAAS,GAAG;AAC9B;AAAA,MACF;AAEA,UAAI;AACF,cAAM,GAAG,MAAM;AAAA,MACjB,SAAS,QAAP;AACA,qBAAa,KAAK,SAAS,MAAM;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,KAAK,YAAY;AACnB,gCAAsB,wCAAc,qBAAqB,IAAI,UAAU;AAAA,IACzE;AAEA,UAAM,eAAe,MAAM,eAAAA,QAAQ,UAAU,KAAK,qBAAqB,GAAG;AAC1E,WAAO,IAAI,YAAY,cAAc,YAAY;AAAA,EACnD;AAAA,EAOA,MAAa,QAAQ;AACnB,UAAM,KAAK,cAAc,YAAY;AACrC,SAAK,cAAc,KAAK,SAAS,CAAC,CAAC;AAAA,EACrC;AAAA,EAEO,OAAO,MACZ,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,SAAK,cAAc,KAAK,SAAS,MAAM;AACvC,SAAK,cAAc,KAAK,SAAS,OAAO;AAAA,EAC1C,CAAC;AACL;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,+BAA8B;AAC9B,2BAA6B;AAiBtB,MAAM,YAAY;AAAA,EAyBf,YACE,eACA,eACR;AAFQ;AACA;AAAA,EACP;AAAA,EA3BH,aAAoB,MAAM,KAAa,IAAuB,KAA0B;AACtF,UAAM,eAAe,IAAI,kCAA+B;AAExD,QAAI,sBAAsB,OAAO,KAAmB,WAA4B;AAC9E,UAAI,KAAK;AACP,qBAAa,KAAK,SAAS,GAAG;AAC9B;AAAA,MACF;AAEA,UAAI;AACF,cAAM,GAAG,MAAM;AAAA,MACjB,SAAS,QAAQ;AACf,qBAAa,KAAK,SAAS,MAAM;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,KAAK,YAAY;AACnB,gCAAsB,wCAAc,qBAAqB,IAAI,UAAU;AAAA,IACzE;AAEA,UAAM,eAAe,MAAM,eAAAA,QAAQ,UAAU,KAAK,qBAAqB,GAAG;AAC1E,WAAO,IAAI,YAAY,cAAc,YAAY;AAAA,EACnD;AAAA,EAOA,MAAa,QAAQ;AACnB,UAAM,KAAK,cAAc,YAAY;AACrC,SAAK,cAAc,KAAK,SAAS,CAAC,CAAC;AAAA,EACrC;AAAA,EAEO,OAAO,MACZ,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,SAAK,cAAc,KAAK,SAAS,MAAM;AACvC,SAAK,cAAc,KAAK,SAAS,OAAO;AAAA,EAC1C,CAAC;AACL;",
6
6
  "names": ["watcher"]
7
7
  }
@@ -0,0 +1,4 @@
1
+ export declare const is: {
2
+ defined: <T>(value: T | undefined) => value is T;
3
+ notNull: <T>(value: T | null) => value is T;
4
+ };
@@ -0,0 +1,2 @@
1
+ export declare function isValidID(id: string): boolean;
2
+ export declare function isPrefixedULID(id: string): boolean;
@@ -0,0 +1,22 @@
1
+ export * as attributes from './attribute-utils';
2
+ export * as cache from './cache-utils';
3
+ export * as casing from './case-utils';
4
+ export * as emitter from './event-emitter';
5
+ export * as esbuild from './esbuild-utils';
6
+ export * as filewatcher from './file-watcher';
7
+ export * as guards from './guard-utils';
8
+ export * as id from './id-utils';
9
+ export * as object from './object-utils';
10
+ export * as path from './path-utils';
11
+ export * as pkgJson from './pkgjson-utils';
12
+ export * as promises from './promise-utils';
13
+ export * as prompt from './prompt-utils';
14
+ export * as records from './record-utils';
15
+ export * as require from './require-utils';
16
+ export * as schema from './schema-utils';
17
+ export * as semver from './semver-utils';
18
+ export * as string from './string-utils';
19
+ export * as template from './template-utils';
20
+ export * as tunnel from './tunnel-utils';
21
+ export * as types from './type-utils';
22
+ export * as url from './url-utils';
@@ -0,0 +1 @@
1
+ export declare const omit: <O extends object, K extends keyof O>(obj: O, property: K) => Omit<O, K>;
@@ -0,0 +1,28 @@
1
+ export declare namespace posix {
2
+ type AbsolutePath = `/${string}`;
3
+ const isPath: (path: string) => boolean;
4
+ const isRelativePath: (path: string) => boolean;
5
+ const isAbsolutePath: (path: string) => path is AbsolutePath;
6
+ }
7
+ export declare namespace win32 {
8
+ type AbsolutePath = `${string}:\\${string}`;
9
+ const isPath: (path: string) => boolean;
10
+ const isRelativePath: (path: string) => boolean;
11
+ const isAbsolutePath: (path: string) => path is AbsolutePath;
12
+ }
13
+ export type AbsolutePath = posix.AbsolutePath | win32.AbsolutePath;
14
+ export declare const isPath: (path: string) => boolean;
15
+ export declare const isPlatformSpecificPath: (path: string) => boolean;
16
+ export declare const isPlatformSpecificAbsolutePath: (path: string) => path is AbsolutePath;
17
+ export declare const cwd: () => AbsolutePath;
18
+ export declare const join: (abs: AbsolutePath, ...paths: string[]) => AbsolutePath;
19
+ export declare const rmExtension: (filename: string) => string;
20
+ export declare const toUnix: (path: string) => string;
21
+ export declare const toNormalizedPosixPath: (path: string) => string;
22
+ export declare const absoluteFrom: (rootdir: AbsolutePath, target: string) => AbsolutePath;
23
+ export declare const relativeFrom: (rootdir: AbsolutePath, target: string) => string;
24
+ export declare class PathStore<P extends string> {
25
+ readonly abs: Record<P, AbsolutePath>;
26
+ constructor(abs: Record<P, AbsolutePath>);
27
+ rel(from: Extract<P, `${string}Dir`>): Record<P, AbsolutePath> extends infer T extends object ? { [P_1 in keyof T]: string; } : never;
28
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ type JSON = string | number | boolean | null | JSON[] | {
2
+ [key: string]: JSON;
3
+ };
4
+ export type PackageJson = {
5
+ name: string;
6
+ version?: string;
7
+ description?: string;
8
+ scripts?: Record<string, string>;
9
+ dependencies?: Record<string, string>;
10
+ devDependencies?: Record<string, string>;
11
+ peerDependencies?: Record<string, string>;
12
+ } & {
13
+ [key: string]: JSON;
14
+ };
15
+ export declare const readPackageJson: (path: string) => Promise<PackageJson | undefined>;
16
+ export declare const findDependency: (pkgJson: PackageJson, name: string) => string | undefined;
17
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare const awaitRecord: <T>(record: Record<string, Promise<T>>) => Promise<Record<string, T>>;
2
+ export declare const sleep: (ms: number) => Promise<unknown>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { Logger } from '../logger';
2
+ export type CLIPromptsProps = {
3
+ confirm: boolean;
4
+ };
5
+ type ChoiceValueType = string | number;
6
+ export type CLIPromptsChoice<V extends ChoiceValueType> = {
7
+ title: string;
8
+ value: V;
9
+ };
10
+ type PasswordOptions = Partial<{
11
+ default: string | undefined;
12
+ initial: string;
13
+ }>;
14
+ type SelectOptions<V extends ChoiceValueType> = Partial<{
15
+ default: V | undefined;
16
+ initial: CLIPromptsChoice<V>;
17
+ choices: CLIPromptsChoice<V>[];
18
+ }>;
19
+ type TextOptions = Partial<{
20
+ default: string | undefined;
21
+ initial: string;
22
+ }>;
23
+ export declare class CLIPrompt {
24
+ private _props;
25
+ private _logger;
26
+ constructor(_props: CLIPromptsProps, _logger: Logger);
27
+ confirm(message: string): Promise<boolean>;
28
+ password(message: string, opts?: PasswordOptions): Promise<string | undefined>;
29
+ select<V extends ChoiceValueType = string>(message: string, opts?: SelectOptions<V>): Promise<V | undefined>;
30
+ text(message: string, opts?: TextOptions): Promise<string | undefined>;
31
+ private _prompts;
32
+ }
33
+ export {};
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/prompt-utils.ts"],
4
4
  "sourcesContent": ["import prompts from 'prompts'\nimport type { Logger } from '../logger'\n\nexport type CLIPromptsProps = {\n confirm: boolean\n}\n\ntype ChoiceValueType = string | number\n\nexport type CLIPromptsChoice<V extends ChoiceValueType> = {\n title: string\n value: V\n}\n\ntype PasswordOptions = Partial<{\n default: string | undefined\n initial: string\n}>\ntype SelectOptions<V extends ChoiceValueType> = Partial<{\n default: V | undefined\n initial: CLIPromptsChoice<V>\n choices: CLIPromptsChoice<V>[]\n}>\ntype TextOptions = Partial<{\n default: string | undefined\n initial: string\n}>\n\nexport class CLIPrompt {\n public constructor(\n private _props: CLIPromptsProps,\n private _logger: Logger\n ) {}\n\n public async confirm(message: string): Promise<boolean> {\n if (this._props.confirm) {\n this._logger.debug(`Confirming automatically (non-interactive mode): ${message}`)\n return true\n }\n\n const { confirm } = await this._prompts({\n type: 'confirm',\n name: 'confirm',\n message,\n initial: false,\n })\n\n if (!confirm) {\n return false\n }\n return true\n }\n\n public async password(message: string, opts: PasswordOptions = {}): Promise<string | undefined> {\n if (this._props.confirm) {\n this._logger.debug(`Return default (non-interactive mode): ${message}`)\n return opts?.default\n }\n\n const { prompted } = await this._prompts({\n type: 'password',\n name: 'prompted',\n message,\n initial: opts?.initial,\n })\n\n return prompted ? prompted : undefined\n }\n\n public async select<V extends ChoiceValueType = string>(\n message: string,\n opts: SelectOptions<V> = {}\n ): Promise<V | undefined> {\n if (this._props.confirm) {\n this._logger.debug(`Return default (non-interactive mode): ${message}`)\n return opts?.default\n }\n\n // NOTE: whilst Prompts supports string, number, date and boolean values for\n // choices, it behaves unexpectedly when the value is a number and is\n // equal to 0. To work around this, we convert the value to a symbol\n // if it is 0, and then convert it back to a number if it was 0.\n\n const isNumber = typeof opts?.choices?.[0]?.value === 'number'\n const transformedChoices = isNumber\n ? opts?.choices?.map((c) => ({ ...c, value: c.value === 0 ? Symbol.for('0') : c.value }))\n : opts?.choices\n\n const { prompted } = await this._prompts({\n type: 'autocomplete',\n name: 'prompted',\n message,\n initial: opts?.initial?.value,\n choices: transformedChoices as prompts.PromptObject['choices'],\n })\n\n return prompted !== undefined ? (isNumber && prompted === Symbol.for('0') ? 0 : prompted) : undefined\n }\n\n public async text(message: string, opts: TextOptions = {}): Promise<string | undefined> {\n if (this._props.confirm) {\n this._logger.debug(`Return default (non-interactive mode): ${message}`)\n return opts?.default\n }\n\n const { prompted } = await this._prompts({\n type: 'text',\n name: 'prompted',\n message,\n initial: opts?.initial,\n })\n\n return prompted ? prompted : undefined\n }\n\n private _prompts = (...args: Parameters<typeof prompts>): ReturnType<typeof prompts> => {\n this._logger.cleanup()\n return prompts(...args)\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AA4Bb,MAAM,UAAU;AAAA,EACd,YACG,QACA,SACR;AAFQ;AACA;AAAA,EACP;AAAA,EAEH,MAAa,QAAQ,SAAmC;AACtD,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,oDAAoD,SAAS;AAChF,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,SAAS;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,SAAS,SAAiB,OAAwB,CAAC,GAAgC;AAC9F,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,SAAS;AACtE,aAAO,MAAM;AAAA,IACf;AAEA,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM;AAAA,IACjB,CAAC;AAED,WAAO,WAAW,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAa,OACX,SACA,OAAyB,CAAC,GACF;AACxB,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,SAAS;AACtE,aAAO,MAAM;AAAA,IACf;AAOA,UAAM,WAAW,OAAO,MAAM,UAAU,CAAC,GAAG,UAAU;AACtD,UAAM,qBAAqB,WACvB,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IACtF,MAAM;AAEV,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM,SAAS;AAAA,MACxB,SAAS;AAAA,IACX,CAAC;AAED,WAAO,aAAa,SAAa,YAAY,aAAa,OAAO,IAAI,GAAG,IAAI,IAAI,WAAY;AAAA,EAC9F;AAAA,EAEA,MAAa,KAAK,SAAiB,OAAoB,CAAC,GAAgC;AACtF,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,SAAS;AACtE,aAAO,MAAM;AAAA,IACf;AAEA,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM;AAAA,IACjB,CAAC;AAED,WAAO,WAAW,WAAW;AAAA,EAC/B;AAAA,EAEQ,WAAW,IAAI,SAAiE;AACtF,SAAK,QAAQ,QAAQ;AACrB,eAAO,eAAAA,SAAQ,GAAG,IAAI;AAAA,EACxB;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AA4Bb,MAAM,UAAU;AAAA,EACd,YACG,QACA,SACR;AAFQ;AACA;AAAA,EACP;AAAA,EAEH,MAAa,QAAQ,SAAmC;AACtD,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,oDAAoD,OAAO,EAAE;AAChF,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,SAAS;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,SAAS,SAAiB,OAAwB,CAAC,GAAgC;AAC9F,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,OAAO,EAAE;AACtE,aAAO,MAAM;AAAA,IACf;AAEA,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM;AAAA,IACjB,CAAC;AAED,WAAO,WAAW,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAa,OACX,SACA,OAAyB,CAAC,GACF;AACxB,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,OAAO,EAAE;AACtE,aAAO,MAAM;AAAA,IACf;AAOA,UAAM,WAAW,OAAO,MAAM,UAAU,CAAC,GAAG,UAAU;AACtD,UAAM,qBAAqB,WACvB,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IACtF,MAAM;AAEV,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM,SAAS;AAAA,MACxB,SAAS;AAAA,IACX,CAAC;AAED,WAAO,aAAa,SAAa,YAAY,aAAa,OAAO,IAAI,GAAG,IAAI,IAAI,WAAY;AAAA,EAC9F;AAAA,EAEA,MAAa,KAAK,SAAiB,OAAoB,CAAC,GAAgC;AACtF,QAAI,KAAK,OAAO,SAAS;AACvB,WAAK,QAAQ,MAAM,0CAA0C,OAAO,EAAE;AACtE,aAAO,MAAM;AAAA,IACf;AAEA,UAAM,EAAE,SAAS,IAAI,MAAM,KAAK,SAAS;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,SAAS,MAAM;AAAA,IACjB,CAAC;AAED,WAAO,WAAW,WAAW;AAAA,EAC/B;AAAA,EAEQ,WAAW,IAAI,SAAiE;AACtF,SAAK,QAAQ,QAAQ;AACrB,eAAO,eAAAA,SAAQ,GAAG,IAAI;AAAA,EACxB;AACF;",
6
6
  "names": ["prompts"]
7
7
  }
@@ -0,0 +1,8 @@
1
+ export declare const setNullOnMissingValues: <A, B>(record?: Record<string, A>, oldRecord?: Record<string, B>) => Record<string, A | null>;
2
+ export declare const zipObjects: <A, B>(recordA: Record<string, A>, recordB: Record<string, B>) => Record<string, [A | null, B | null]>;
3
+ export declare const mapValues: <A, B>(record: Record<string, A>, fn: (value: A, key: string) => B) => Record<string, B>;
4
+ export declare const mapValuesAsync: <A, B>(record: Record<string, A>, fn: (value: A, key: string) => Promise<B>) => Promise<Record<string, B>>;
5
+ export declare const mapKeys: <A>(record: Record<string, A>, fn: (value: A, key: string) => string) => Record<string, A>;
6
+ export declare function filterValues<A, B extends A>(record: Record<string, A>, fn: (value: A, key: string) => value is B): Record<string, B>;
7
+ export declare function filterValues<A, _B extends A>(record: Record<string, A>, fn: (value: A, key: string) => boolean): Record<string, A>;
8
+ export declare const mergeRecords: <K extends string, V>(a: Record<K, V>, b: Record<K, V>, merge: (v1: V, v2: V) => V) => Record<K, V>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare const requireJsFile: <T>(path: string) => T;
2
+ export declare const requireJsCode: <T>(code: string) => T;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/require-utils.ts"],
4
4
  "sourcesContent": ["import Module from 'module'\nimport pathlib from 'path'\n\nexport const requireJsFile = <T>(path: string): T => {\n return require(path)\n}\n\nexport const requireJsCode = <T>(code: string): T => {\n const filedir = 'tmp'\n const filename = `${Date.now()}.js`\n\n const fileid = pathlib.join(filedir, filename)\n\n const m = new Module(fileid)\n m.filename = filename\n\n try {\n // @ts-ignore\n m._compile(code, filename)\n return m.exports\n } catch (thrown: unknown) {\n const error = thrown instanceof Error ? thrown : new Error(`${thrown}`)\n throw _injectStackTrace(error, code, filename)\n }\n}\n\nconst STACK_TRACE_SURROUNDING_LINES = 3\n\nconst _injectStackTrace = (compileError: Error, code: string, filename: string): Error => {\n if (!compileError.stack || !compileError.stack.includes(`${filename}:`)) {\n return compileError\n }\n\n // Extract line and column from the stack trace:\n const [, locationInfo] = compileError.stack.split(`${filename}:`, 2)\n if (!locationInfo) {\n return compileError\n }\n\n const [lineNoStr, _rest] = locationInfo.split(':', 2)\n if (!lineNoStr || !_rest) {\n return compileError\n }\n\n const [columnStr] = _rest.split(')', 1)\n if (!columnStr) {\n return compileError\n }\n\n const lineNo = parseInt(lineNoStr)\n const column = parseInt(columnStr)\n\n // Build the stack trace:\n const allLines = code.split('\\n')\n const linesBefore = allLines.slice(Math.max(0, lineNo - 1 - STACK_TRACE_SURROUNDING_LINES), lineNo - 1)\n const offendingLine = allLines[lineNo - 1]\n const caretLine = ' '.repeat(column - 1) + '^'\n const linesAfter = allLines.slice(lineNo, Math.min(allLines.length, lineNo + STACK_TRACE_SURROUNDING_LINES))\n const stackTrace = [...linesBefore, offendingLine, caretLine, ...linesAfter].join('\\n')\n\n return new Error(`${compileError.message}\\n\\nOffending code:\\n\\n${stackTrace}`, { cause: compileError })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,kBAAoB;AAEb,MAAM,gBAAgB,CAAI,SAAoB;AACnD,SAAO,QAAQ,IAAI;AACrB;AAEO,MAAM,gBAAgB,CAAI,SAAoB;AACnD,QAAM,UAAU;AAChB,QAAM,WAAW,GAAG,KAAK,IAAI;AAE7B,QAAM,SAAS,YAAAA,QAAQ,KAAK,SAAS,QAAQ;AAE7C,QAAM,IAAI,IAAI,cAAAC,QAAO,MAAM;AAC3B,IAAE,WAAW;AAEb,MAAI;AAEF,MAAE,SAAS,MAAM,QAAQ;AACzB,WAAO,EAAE;AAAA,EACX,SAAS,QAAP;AACA,UAAM,QAAQ,kBAAkB,QAAQ,SAAS,IAAI,MAAM,GAAG,QAAQ;AACtE,UAAM,kBAAkB,OAAO,MAAM,QAAQ;AAAA,EAC/C;AACF;AAEA,MAAM,gCAAgC;AAEtC,MAAM,oBAAoB,CAAC,cAAqB,MAAc,aAA4B;AACxF,MAAI,CAAC,aAAa,SAAS,CAAC,aAAa,MAAM,SAAS,GAAG,WAAW,GAAG;AACvE,WAAO;AAAA,EACT;AAGA,QAAM,CAAC,EAAE,YAAY,IAAI,aAAa,MAAM,MAAM,GAAG,aAAa,CAAC;AACnE,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,WAAW,KAAK,IAAI,aAAa,MAAM,KAAK,CAAC;AACpD,MAAI,CAAC,aAAa,CAAC,OAAO;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,SAAS,IAAI,MAAM,MAAM,KAAK,CAAC;AACtC,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,SAAS,SAAS;AACjC,QAAM,SAAS,SAAS,SAAS;AAGjC,QAAM,WAAW,KAAK,MAAM,IAAI;AAChC,QAAM,cAAc,SAAS,MAAM,KAAK,IAAI,GAAG,SAAS,IAAI,6BAA6B,GAAG,SAAS,CAAC;AACtG,QAAM,gBAAgB,SAAS,SAAS,CAAC;AACzC,QAAM,YAAY,IAAI,OAAO,SAAS,CAAC,IAAI;AAC3C,QAAM,aAAa,SAAS,MAAM,QAAQ,KAAK,IAAI,SAAS,QAAQ,SAAS,6BAA6B,CAAC;AAC3G,QAAM,aAAa,CAAC,GAAG,aAAa,eAAe,WAAW,GAAG,UAAU,EAAE,KAAK,IAAI;AAEtF,SAAO,IAAI,MAAM,GAAG,aAAa;AAAA;AAAA;AAAA;AAAA,EAAiC,cAAc,EAAE,OAAO,aAAa,CAAC;AACzG;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,kBAAoB;AAEb,MAAM,gBAAgB,CAAI,SAAoB;AACnD,SAAO,QAAQ,IAAI;AACrB;AAEO,MAAM,gBAAgB,CAAI,SAAoB;AACnD,QAAM,UAAU;AAChB,QAAM,WAAW,GAAG,KAAK,IAAI,CAAC;AAE9B,QAAM,SAAS,YAAAA,QAAQ,KAAK,SAAS,QAAQ;AAE7C,QAAM,IAAI,IAAI,cAAAC,QAAO,MAAM;AAC3B,IAAE,WAAW;AAEb,MAAI;AAEF,MAAE,SAAS,MAAM,QAAQ;AACzB,WAAO,EAAE;AAAA,EACX,SAAS,QAAiB;AACxB,UAAM,QAAQ,kBAAkB,QAAQ,SAAS,IAAI,MAAM,GAAG,MAAM,EAAE;AACtE,UAAM,kBAAkB,OAAO,MAAM,QAAQ;AAAA,EAC/C;AACF;AAEA,MAAM,gCAAgC;AAEtC,MAAM,oBAAoB,CAAC,cAAqB,MAAc,aAA4B;AACxF,MAAI,CAAC,aAAa,SAAS,CAAC,aAAa,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG;AACvE,WAAO;AAAA,EACT;AAGA,QAAM,CAAC,EAAE,YAAY,IAAI,aAAa,MAAM,MAAM,GAAG,QAAQ,KAAK,CAAC;AACnE,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,WAAW,KAAK,IAAI,aAAa,MAAM,KAAK,CAAC;AACpD,MAAI,CAAC,aAAa,CAAC,OAAO;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,SAAS,IAAI,MAAM,MAAM,KAAK,CAAC;AACtC,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,SAAS,SAAS;AACjC,QAAM,SAAS,SAAS,SAAS;AAGjC,QAAM,WAAW,KAAK,MAAM,IAAI;AAChC,QAAM,cAAc,SAAS,MAAM,KAAK,IAAI,GAAG,SAAS,IAAI,6BAA6B,GAAG,SAAS,CAAC;AACtG,QAAM,gBAAgB,SAAS,SAAS,CAAC;AACzC,QAAM,YAAY,IAAI,OAAO,SAAS,CAAC,IAAI;AAC3C,QAAM,aAAa,SAAS,MAAM,QAAQ,KAAK,IAAI,SAAS,QAAQ,SAAS,6BAA6B,CAAC;AAC3G,QAAM,aAAa,CAAC,GAAG,aAAa,eAAe,WAAW,GAAG,UAAU,EAAE,KAAK,IAAI;AAEtF,SAAO,IAAI,MAAM,GAAG,aAAa,OAAO;AAAA;AAAA;AAAA;AAAA,EAA0B,UAAU,IAAI,EAAE,OAAO,aAAa,CAAC;AACzG;",
6
6
  "names": ["pathlib", "Module"]
7
7
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/require-utils.test.ts"],
4
4
  "sourcesContent": ["import { test, expect } from 'vitest'\nimport * as requireUtils from './require-utils'\n\ntest('require js code should do as its name suggests', () => {\n const code = `\n module.exports = {\n foo: 'bar'\n }\n `\n\n const result = requireUtils.requireJsCode<{ foo: string }>(code)\n\n expect(result.foo).toBe('bar')\n})\n\nconst getError = (fn: () => void): Error | undefined => {\n try {\n fn()\n return\n } catch (thrown: unknown) {\n return thrown instanceof Error ? thrown : new Error(`${thrown}`)\n }\n}\n\ntest('require js code should indicate issue in stack trace', () => {\n const code = `\n var foo = undefined\n module.exports = {\n bar: foo.bar\n }\n `\n\n const error = getError(() => requireUtils.requireJsCode(code))\n\n expect(error).toBeDefined()\n expect(error?.message).toContain('bar: foo.bar')\n})\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAA6B;AAC7B,mBAA8B;AAAA,IAE9B,oBAAK,kDAAkD,MAAM;AAC3D,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAMb,QAAM,SAAS,aAAa,cAA+B,IAAI;AAE/D,4BAAO,OAAO,GAAG,EAAE,KAAK,KAAK;AAC/B,CAAC;AAED,MAAM,WAAW,CAAC,OAAsC;AACtD,MAAI;AACF,OAAG;AACH;AAAA,EACF,SAAS,QAAP;AACA,WAAO,kBAAkB,QAAQ,SAAS,IAAI,MAAM,GAAG,QAAQ;AAAA,EACjE;AACF;AAAA,IAEA,oBAAK,wDAAwD,MAAM;AACjE,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,QAAM,QAAQ,SAAS,MAAM,aAAa,cAAc,IAAI,CAAC;AAE7D,4BAAO,KAAK,EAAE,YAAY;AAC1B,4BAAO,OAAO,OAAO,EAAE,UAAU,cAAc;AACjD,CAAC;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAA6B;AAC7B,mBAA8B;AAAA,IAE9B,oBAAK,kDAAkD,MAAM;AAC3D,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAMb,QAAM,SAAS,aAAa,cAA+B,IAAI;AAE/D,4BAAO,OAAO,GAAG,EAAE,KAAK,KAAK;AAC/B,CAAC;AAED,MAAM,WAAW,CAAC,OAAsC;AACtD,MAAI;AACF,OAAG;AACH;AAAA,EACF,SAAS,QAAiB;AACxB,WAAO,kBAAkB,QAAQ,SAAS,IAAI,MAAM,GAAG,MAAM,EAAE;AAAA,EACjE;AACF;AAAA,IAEA,oBAAK,wDAAwD,MAAM;AACjE,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,QAAM,QAAQ,SAAS,MAAM,aAAa,cAAc,IAAI,CAAC;AAE7D,4BAAO,KAAK,EAAE,YAAY;AAC1B,4BAAO,OAAO,OAAO,EAAE,UAAU,cAAc;AACjD,CAAC;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ import * as sdk from '@botpress/sdk';
2
+ import { JSONSchema7 } from 'json-schema';
3
+ type SchemaOptions = {
4
+ title?: string;
5
+ examples?: any[];
6
+ };
7
+ type SchemaDefinition = {
8
+ schema: sdk.ZuiObjectOrRefSchema;
9
+ ui?: Record<string, SchemaOptions | undefined>;
10
+ };
11
+ export declare function mapZodToJsonSchema(definition: SchemaDefinition): Promise<ReturnType<typeof sdk.transforms.toJSONSchemaLegacy>>;
12
+ export declare const dereferenceSchema: (schema: JSONSchema7) => Promise<JSONSchema7>;
13
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import semver from 'semver';
2
+ export declare namespace releases {
3
+ const eq: (a: semver.ReleaseType, b: semver.ReleaseType) => boolean;
4
+ const gt: (a: semver.ReleaseType, b: semver.ReleaseType) => boolean;
5
+ const gte: (a: semver.ReleaseType, b: semver.ReleaseType) => boolean;
6
+ const lt: (a: semver.ReleaseType, b: semver.ReleaseType) => boolean;
7
+ const lte: (a: semver.ReleaseType, b: semver.ReleaseType) => boolean;
8
+ }
@@ -0,0 +1,2 @@
1
+ export declare const splitOnce: (text: string, separator: string) => [string, string | undefined];
2
+ export declare function chunkString(input: string, chunkSize: number): Generator<string, void, void>;
@@ -0,0 +1 @@
1
+ export declare const formatHandleBars: (templateStr: string, data: Record<string, string>) => string;
@@ -0,0 +1,49 @@
1
+ import { TunnelTail, ClientCloseEvent, ClientErrorEvent } from '@bpinternal/tunnel';
2
+ import { Logger } from '../logger';
3
+ import { EventEmitter } from './event-emitter';
4
+ export type ReconnectionTriggerEvent = {
5
+ type: 'init';
6
+ ev: null;
7
+ } | {
8
+ type: 'error';
9
+ ev: ClientErrorEvent;
10
+ } | {
11
+ type: 'close';
12
+ ev: ClientCloseEvent;
13
+ };
14
+ export type ReconnectedEvent = {
15
+ tunnel: TunnelTail;
16
+ ev: ReconnectionTriggerEvent;
17
+ };
18
+ export declare class ReconnectionFailedError extends Error {
19
+ readonly event: ReconnectionTriggerEvent;
20
+ constructor(event: ReconnectionTriggerEvent);
21
+ private static _reason;
22
+ }
23
+ export declare class TunnelSupervisor {
24
+ private _tunnelUrl;
25
+ private _tunnelId;
26
+ private _logger;
27
+ private _tunnel?;
28
+ private _closed;
29
+ private _started;
30
+ readonly events: EventEmitter<{
31
+ connectionFailed: ReconnectionTriggerEvent;
32
+ manuallyClosed: null;
33
+ connected: {
34
+ tunnel: TunnelTail;
35
+ ev: ReconnectionTriggerEvent;
36
+ };
37
+ }>;
38
+ constructor(_tunnelUrl: string, _tunnelId: string, _logger: Logger);
39
+ start(): Promise<void>;
40
+ get closed(): boolean;
41
+ /**
42
+ * @returns Promise that rejects when a reconnection attempt fails and resolves when the tunnel is closed manually
43
+ */
44
+ wait(): Promise<void>;
45
+ close(): void;
46
+ private _reconnectSync;
47
+ private _reconnect;
48
+ private _registerListeners;
49
+ }