@botonic/cli 0.40.1 → 0.41.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +0 -175
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.js +5 -0
  5. package/lib/{botonic-api-service.d.ts → src/botonic-api-service.d.ts} +3 -3
  6. package/lib/src/botonic-api-service.js +245 -0
  7. package/lib/src/botonic-api-service.js.map +1 -0
  8. package/lib/src/botonic-examples.d.ts +2 -0
  9. package/lib/src/botonic-examples.js +28 -0
  10. package/lib/src/botonic-examples.js.map +1 -0
  11. package/lib/{commands → src/commands}/deploy.d.ts +13 -22
  12. package/lib/src/commands/deploy.js +346 -0
  13. package/lib/src/commands/deploy.js.map +1 -0
  14. package/lib/src/commands/login.d.ts +11 -0
  15. package/lib/src/commands/login.js +33 -0
  16. package/lib/src/commands/login.js.map +1 -0
  17. package/lib/src/commands/logout.d.ts +11 -0
  18. package/lib/src/commands/logout.js +22 -0
  19. package/lib/src/commands/logout.js.map +1 -0
  20. package/lib/{commands → src/commands}/new.d.ts +8 -11
  21. package/lib/src/commands/new.js +134 -0
  22. package/lib/src/commands/new.js.map +1 -0
  23. package/lib/{commands → src/commands}/serve.d.ts +3 -3
  24. package/lib/src/commands/serve.js +22 -0
  25. package/lib/src/commands/serve.js.map +1 -0
  26. package/lib/src/constants.js +7 -0
  27. package/lib/src/constants.js.map +1 -0
  28. package/lib/src/index.d.ts +1 -0
  29. package/lib/src/index.js +2 -0
  30. package/lib/src/index.js.map +1 -0
  31. package/lib/{interfaces.d.ts → src/interfaces.d.ts} +9 -0
  32. package/lib/src/interfaces.js +2 -0
  33. package/lib/{interfaces.js.map → src/interfaces.js.map} +1 -1
  34. package/lib/src/util/bot-config.js +98 -0
  35. package/lib/src/util/bot-config.js.map +1 -0
  36. package/lib/{analytics → src/util}/credentials-handler.d.ts +1 -1
  37. package/lib/src/util/credentials-handler.js +73 -0
  38. package/lib/src/util/credentials-handler.js.map +1 -0
  39. package/lib/src/util/download-gzip.js +71 -0
  40. package/lib/src/util/download-gzip.js.map +1 -0
  41. package/lib/{util → src/util}/environment-info.d.ts +1 -1
  42. package/lib/src/util/environment-info.js +46 -0
  43. package/lib/src/util/environment-info.js.map +1 -0
  44. package/lib/{util → src/util}/file-system.d.ts +2 -2
  45. package/lib/src/util/file-system.js +45 -0
  46. package/lib/src/util/file-system.js.map +1 -0
  47. package/lib/src/util/system.js +32 -0
  48. package/lib/src/util/system.js.map +1 -0
  49. package/lib/tsconfig.tsbuildinfo +1 -0
  50. package/oclif.manifest.json +191 -1
  51. package/package.json +51 -35
  52. package/bin/run +0 -5
  53. package/lib/analytics/credentials-handler.js +0 -77
  54. package/lib/analytics/credentials-handler.js.map +0 -1
  55. package/lib/botonic-api-service.js +0 -274
  56. package/lib/botonic-api-service.js.map +0 -1
  57. package/lib/botonic-examples.d.ts +0 -2
  58. package/lib/botonic-examples.js +0 -76
  59. package/lib/botonic-examples.js.map +0 -1
  60. package/lib/commands/deploy.js +0 -422
  61. package/lib/commands/deploy.js.map +0 -1
  62. package/lib/commands/login.d.ts +0 -16
  63. package/lib/commands/login.js +0 -47
  64. package/lib/commands/login.js.map +0 -1
  65. package/lib/commands/logout.d.ts +0 -11
  66. package/lib/commands/logout.js +0 -29
  67. package/lib/commands/logout.js.map +0 -1
  68. package/lib/commands/new.js +0 -159
  69. package/lib/commands/new.js.map +0 -1
  70. package/lib/commands/serve.js +0 -28
  71. package/lib/commands/serve.js.map +0 -1
  72. package/lib/commands/test.d.ts +0 -8
  73. package/lib/commands/test.js +0 -43
  74. package/lib/commands/test.js.map +0 -1
  75. package/lib/constants.js +0 -10
  76. package/lib/constants.js.map +0 -1
  77. package/lib/index.d.ts +0 -1
  78. package/lib/index.js +0 -6
  79. package/lib/index.js.map +0 -1
  80. package/lib/interfaces.js +0 -3
  81. package/lib/util/bot-config.js +0 -114
  82. package/lib/util/bot-config.js.map +0 -1
  83. package/lib/util/download-gzip.js +0 -87
  84. package/lib/util/download-gzip.js.map +0 -1
  85. package/lib/util/environment-info.js +0 -53
  86. package/lib/util/environment-info.js.map +0 -1
  87. package/lib/util/file-system.js +0 -59
  88. package/lib/util/file-system.js.map +0 -1
  89. package/lib/util/system.js +0 -43
  90. package/lib/util/system.js.map +0 -1
  91. package/scripts/postinstall.js +0 -13
  92. /package/lib/{constants.d.ts → src/constants.d.ts} +0 -0
  93. /package/lib/{util → src/util}/bot-config.d.ts +0 -0
  94. /package/lib/{util → src/util}/download-gzip.d.ts +0 -0
  95. /package/lib/{util → src/util}/system.d.ts +0 -0
@@ -0,0 +1,22 @@
1
+ import { Command } from '@oclif/core';
2
+ import pc from 'picocolors';
3
+ import { spawnNpmScript } from '../util/system.js';
4
+ export default class Serve extends Command {
5
+ static args = {};
6
+ static description = 'Serve your bot in your localhost';
7
+ static examples = [
8
+ '$ botonic serve\n> Project is running at http://localhost:8080/',
9
+ ];
10
+ static flags = {};
11
+ async run() {
12
+ try {
13
+ console.log(pc.blue('\nServing Botonic...'));
14
+ spawnNpmScript('start');
15
+ }
16
+ catch (e) {
17
+ console.log(e);
18
+ }
19
+ return Promise.resolve();
20
+ }
21
+ }
22
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAU,IAAI,GAAG,EAAE,CAAA;IACzB,MAAM,CAAU,WAAW,GAAG,kCAAkC,CAAA;IAChE,MAAM,CAAU,QAAQ,GAAG;QACzB,iEAAiE;KAClE,CAAA;IACD,MAAM,CAAU,KAAK,GAAG,EAAE,CAAA;IAEnB,KAAK,CAAC,GAAG;QACd,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;YAC5C,cAAc,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const BOTONIC_NPM_NAMESPACE = '@botonic';
2
+ export const BOTONIC_HOME_DIRNAME = '.botonic';
3
+ export const GLOBAL_CREDENTIALS_FILENAME = 'credentials.json';
4
+ export const BOTONIC_PROJECT_PATH = process.cwd();
5
+ export const BOT_CREDENTIALS_FILENAME = '.botonic.json';
6
+ export const CLOUD_PROVIDERS = Object.freeze({ HUBTYPE: 'hubtype' });
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAA;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAA;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAA;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAA;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export { run } from '@oclif/core';
@@ -0,0 +1,2 @@
1
+ export { run } from '@oclif/core';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA"}
@@ -100,4 +100,13 @@ export type JSONObject = {
100
100
  [member: string]: JSONValue;
101
101
  };
102
102
  export type JSONArray = JSONValue[];
103
+ export interface DeployHubtypeFlags {
104
+ command?: string;
105
+ botName?: string;
106
+ email?: string;
107
+ password?: string;
108
+ }
109
+ export interface LoginErrorData {
110
+ error_description?: string;
111
+ }
103
112
  export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import childProcess from 'child_process';
2
+ import { promises as fs } from 'fs';
3
+ import ora from 'ora';
4
+ import path from 'path';
5
+ import * as util from 'util';
6
+ const BOTONIC_PREFIX_PACKAGE = '@botonic';
7
+ const BOTONIC_CORE_PACKAGE = `${BOTONIC_PREFIX_PACKAGE}/core`;
8
+ const botonicCliVersionRegex = /@botonic\/cli\/([^ ]+)/;
9
+ const NPM_DEPTH_1 = 1;
10
+ const NPM_DEPTH_0 = 0;
11
+ // Also get alpha and beta versions
12
+ const versionRegex = /@botonic\/[^@]+@(\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?)/;
13
+ export class BotConfig {
14
+ static async get(appDirectory) {
15
+ const spinner = ora({
16
+ text: 'Getting bot config...',
17
+ spinner: 'bouncingBar',
18
+ }).start();
19
+ const packages = await this.getBotonicDependencies(appDirectory);
20
+ const [nodeVersion, npmVersion, botonicCli] = await Promise.all(['node -v', 'npm -v', 'botonic -v'].map(command => this.getOutputByCommand(command)));
21
+ const botonicCliVersion = botonicCli.match(botonicCliVersionRegex)?.[1] || '';
22
+ const configLoaded = await this.loadBotConfig(appDirectory);
23
+ spinner.succeed();
24
+ return {
25
+ build_info: {
26
+ node_version: nodeVersion,
27
+ npm_version: npmVersion,
28
+ botonic_cli_version: botonicCliVersion,
29
+ },
30
+ packages,
31
+ tools: configLoaded.tools,
32
+ payloads: configLoaded.payloads,
33
+ webviews: configLoaded.webviews,
34
+ };
35
+ }
36
+ static async loadBotConfig(appDirectory) {
37
+ try {
38
+ const configPath = path.join(appDirectory, 'dist', 'bot-config.js');
39
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
40
+ const botConfig = require(path.resolve(configPath));
41
+ fs.rm(path.join(appDirectory, 'dist', 'bot-config.js'));
42
+ return {
43
+ tools: botConfig?.tools || [],
44
+ payloads: botConfig?.payloads || [],
45
+ webviews: botConfig?.webviews || [],
46
+ };
47
+ }
48
+ catch (error) {
49
+ console.warn(`Error loading dist/bot-config.js. This file is not required but is used to share config with flow builder frontend.
50
+ To create this file update your build process to include the bot-config.js file in dest folder.
51
+ You have an example with rspack in botonic-dx-bundler-rspack/baseline/rspack.config.ts`);
52
+ return {
53
+ tools: [],
54
+ payloads: [],
55
+ webviews: [],
56
+ };
57
+ }
58
+ }
59
+ static async getBotonicDependencies(appDirectory) {
60
+ const packages = {};
61
+ try {
62
+ const packageJsonPath = path.join(appDirectory, 'package.json');
63
+ const data = await fs.readFile(packageJsonPath, 'utf8');
64
+ const packageJson = JSON.parse(data);
65
+ const botonicDependencies = Object.keys(packageJson.dependencies).filter(dependency => dependency.startsWith(BOTONIC_PREFIX_PACKAGE));
66
+ if (!botonicDependencies.includes(BOTONIC_CORE_PACKAGE)) {
67
+ botonicDependencies.push(BOTONIC_CORE_PACKAGE);
68
+ }
69
+ await Promise.all(botonicDependencies.map(botonicDependency => {
70
+ return this.setDependenciesVersion(botonicDependency, packages, botonicDependency === BOTONIC_CORE_PACKAGE
71
+ ? NPM_DEPTH_1
72
+ : NPM_DEPTH_0);
73
+ }));
74
+ }
75
+ catch (err) {
76
+ console.error(`Error getting botonic dependencies: ${err.message}`);
77
+ }
78
+ return packages;
79
+ }
80
+ static async setDependenciesVersion(dependency, packages, depth = NPM_DEPTH_0) {
81
+ try {
82
+ const output = await this.getOutputByCommand(`npm ls ${dependency} --depth=${depth}`);
83
+ const match = output.match(versionRegex);
84
+ const installedVersion = match ? match[1] : '';
85
+ packages[dependency] = { version: installedVersion };
86
+ }
87
+ catch (error) {
88
+ console.error('Error setting dependencies version:', error);
89
+ }
90
+ return packages;
91
+ }
92
+ static async getOutputByCommand(command) {
93
+ const exec = util.promisify(childProcess.exec);
94
+ const { stdout } = await exec(command);
95
+ return stdout.trim();
96
+ }
97
+ }
98
+ //# sourceMappingURL=bot-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-config.js","sourceRoot":"","sources":["../../../src/util/bot-config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { BotCredentials, CredentialsHandlerArgs, GlobalCredentials, JSONObject } from '../interfaces';
1
+ import { BotCredentials, CredentialsHandlerArgs, GlobalCredentials, JSONObject } from '../interfaces.js';
2
2
  export declare class CredentialsHandler {
3
3
  homeDir: string;
4
4
  pathToCredentials: string;
@@ -0,0 +1,73 @@
1
+ import { join, resolve } from 'path';
2
+ import { BOT_CREDENTIALS_FILENAME, BOTONIC_HOME_DIRNAME, BOTONIC_PROJECT_PATH, GLOBAL_CREDENTIALS_FILENAME, } from '../constants.js';
3
+ import { createDir, getHomeDirectory, pathExists, readJSON, writeJSON, } from '../util/file-system.js';
4
+ export class CredentialsHandler {
5
+ homeDir;
6
+ pathToCredentials;
7
+ constructor(args) {
8
+ this.homeDir = resolve(args.homeDir);
9
+ this.pathToCredentials = join(this.homeDir, args.filename);
10
+ this.initialize();
11
+ }
12
+ initialize() {
13
+ this.createDirIfNotExists();
14
+ }
15
+ createDirIfNotExists() {
16
+ if (!pathExists(this.homeDir))
17
+ createDir(this.homeDir);
18
+ }
19
+ loadJSON() {
20
+ try {
21
+ if (!pathExists(this.pathToCredentials))
22
+ return undefined;
23
+ return readJSON(this.pathToCredentials);
24
+ }
25
+ catch (e) {
26
+ console.warn('Credentials could not be loaded');
27
+ return undefined;
28
+ }
29
+ }
30
+ dumpJSON(obj) {
31
+ try {
32
+ writeJSON(this.pathToCredentials, obj);
33
+ }
34
+ catch (e) {
35
+ console.warn('Credentials could not be overwritten');
36
+ }
37
+ }
38
+ }
39
+ export class GlobalCredentialsHandler extends CredentialsHandler {
40
+ constructor() {
41
+ super({
42
+ homeDir: join(getHomeDirectory(), BOTONIC_HOME_DIRNAME),
43
+ filename: GLOBAL_CREDENTIALS_FILENAME,
44
+ });
45
+ }
46
+ initialize() {
47
+ this.createDirIfNotExists();
48
+ }
49
+ load() {
50
+ const json = this.loadJSON();
51
+ if (!json)
52
+ return undefined;
53
+ return json;
54
+ }
55
+ dump(obj) {
56
+ return this.dumpJSON(obj);
57
+ }
58
+ }
59
+ export class BotCredentialsHandler extends CredentialsHandler {
60
+ constructor() {
61
+ super({ homeDir: BOTONIC_PROJECT_PATH, filename: BOT_CREDENTIALS_FILENAME });
62
+ }
63
+ load() {
64
+ const json = this.loadJSON();
65
+ if (!json)
66
+ return undefined;
67
+ return json;
68
+ }
69
+ dump(obj) {
70
+ return this.dumpJSON(obj);
71
+ }
72
+ }
73
+ //# sourceMappingURL=credentials-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials-handler.js","sourceRoot":"","sources":["../../../src/util/credentials-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEpC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAA;AAOxB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,SAAS,GACV,MAAM,wBAAwB,CAAA;AAE/B,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAQ;IACf,iBAAiB,CAAQ;IAEzB,YAAY,IAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC7B,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAAE,OAAO,SAAS,CAAA;YACzD,OAAO,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;YAC/C,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,GAAe;QACtB,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IAC9D;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,oBAAoB,CAAC;YACvD,QAAQ,EAAE,2BAA2B;SACtC,CAAC,CAAA;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAC3B,OAAO,IAAoC,CAAA;IAC7C,CAAC;IAED,IAAI,CAAC,GAAsB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAA4B,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3D;QACE,KAAK,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAC3B,OAAO,IAAiC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,GAAmB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAA4B,CAAC,CAAA;IACpD,CAAC;CACF"}
@@ -0,0 +1,71 @@
1
+ import { createReadStream } from 'node:fs';
2
+ import { readFile, rename, writeFile } from 'node:fs/promises';
3
+ import { platform } from 'node:os';
4
+ import { createGunzip } from 'node:zlib';
5
+ import { exec } from 'child_process';
6
+ import path from 'path';
7
+ import { extract } from 'tar';
8
+ import { removeRecursively } from './file-system.js';
9
+ function pathByOS(...paths) {
10
+ const devPlatform = platform();
11
+ const realtivePath = path.join(...paths);
12
+ return devPlatform === 'win32'
13
+ ? realtivePath.replace(/\//g, '\\')
14
+ : realtivePath;
15
+ }
16
+ export async function downloadSelectedProject({ exampleName, exampleVersion, }) {
17
+ const exampleNpmNameWithVersion = `@botonic/example-${exampleName}@${exampleVersion}`;
18
+ return new Promise((resolve, reject) => {
19
+ exec(`npm pack ${exampleNpmNameWithVersion}`, (error, stdout, _stderr) => {
20
+ if (error) {
21
+ reject(error);
22
+ return;
23
+ }
24
+ resolve(stdout);
25
+ return;
26
+ });
27
+ });
28
+ }
29
+ export async function extractTarGz({ projectPath, exampleName, exampleVersion, }) {
30
+ // Path to the file .tgz
31
+ const originPath = pathByOS(projectPath, `botonic-example-${exampleName}-${exampleVersion}.tgz`);
32
+ return new Promise((resolve, reject) => {
33
+ // Creates a read stream for the .tgz file
34
+ const readStream = createReadStream(originPath);
35
+ // Create a decompression stream using zlib
36
+ const gunzip = createGunzip();
37
+ // Create an extraction stream to extract the .tgz files.
38
+ const folderStream = extract({ cwd: projectPath });
39
+ // Pipe of the streams: Reading of the file -> Decompression -> Extraction to the destination folder
40
+ readStream.pipe(gunzip).pipe(folderStream);
41
+ // Event handling to monitor extraction success or failure
42
+ folderStream.on('finish', () => {
43
+ removeRecursively(originPath);
44
+ resolve();
45
+ });
46
+ folderStream.on('error', err => {
47
+ console.error('Error while extracting the folder:', err);
48
+ reject(err);
49
+ });
50
+ });
51
+ }
52
+ export async function renameFolder(botName) {
53
+ await rename(pathByOS('.', 'package'), pathByOS('.', botName));
54
+ // console.log('The name of the folder has been changed correctly.')
55
+ return;
56
+ }
57
+ export async function editPackageJsonName(outputPath, botName) {
58
+ const packageJsonPath = pathByOS(outputPath, botName, 'package.json');
59
+ const data = await readFile(packageJsonPath, 'utf8');
60
+ // Parse JSON content in a JavaScript object
61
+ const jsonData = JSON.parse(data);
62
+ // Modify the value of the attribute 'name'
63
+ jsonData.name = botName;
64
+ // Modify the value of the attribute 'version'
65
+ jsonData.version = '0.1.0';
66
+ // Convert the modified object back to JSON format
67
+ const updatedJsonData = JSON.stringify(jsonData, null, 2);
68
+ // Write the modified object back to the JSON file
69
+ return writeFile(packageJsonPath, updatedJsonData);
70
+ }
71
+ //# sourceMappingURL=download-gzip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-gzip.js","sourceRoot":"","sources":["../../../src/util/download-gzip.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SystemInformation } from '../interfaces';
1
+ import { SystemInformation } from '../interfaces.js';
2
2
  export declare function isWindows(): boolean;
3
3
  export declare function getBotonicCLIVersion(): string;
4
4
  export declare function getBotonicDependencies(): any[] | string;
@@ -0,0 +1,46 @@
1
+ import { arch, platform } from 'os';
2
+ import { join } from 'path';
3
+ import { BOTONIC_NPM_NAMESPACE } from '../constants.js';
4
+ import { readJSON } from './file-system.js';
5
+ import { execCommandSafe } from './system.js';
6
+ export function isWindows() {
7
+ return platform() === 'win32';
8
+ }
9
+ export function getBotonicCLIVersion() {
10
+ try {
11
+ return readJSON(join(__dirname, '..', '..', 'package.json'))
12
+ .version;
13
+ }
14
+ catch (e) {
15
+ return String(e);
16
+ }
17
+ }
18
+ export function getBotonicDependencies() {
19
+ try {
20
+ const packageJSON = readJSON('package.json');
21
+ if (!packageJSON)
22
+ return 'No package.json found.';
23
+ const botonicDependencies = Object.entries(packageJSON.dependencies).filter(([k, _]) => k.includes(BOTONIC_NPM_NAMESPACE));
24
+ return botonicDependencies;
25
+ }
26
+ catch (e) {
27
+ return String(e);
28
+ }
29
+ }
30
+ export function getSystemInformation() {
31
+ return {
32
+ platform: platform(),
33
+ arch: arch(),
34
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
35
+ timestamp: new Date().toISOString(),
36
+ is_tty: Boolean(process.stdout.isTTY),
37
+ framework_path: join(__dirname, '..'),
38
+ system_path: isWindows()
39
+ ? execCommandSafe('echo %PATH%')
40
+ : execCommandSafe('echo $PATH'),
41
+ node_version: execCommandSafe('node --version'),
42
+ botonic_cli_version: getBotonicCLIVersion(),
43
+ botonic_dependencies: getBotonicDependencies(),
44
+ };
45
+ }
46
+ //# sourceMappingURL=environment-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-info.js","sourceRoot":"","sources":["../../../src/util/environment-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,EAAE,KAAK,OAAO,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,OAAQ,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAS;aAClE,OAAO,CAAA;IACZ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAI,CAAC,WAAW;YAAE,OAAO,wBAAwB,CAAA;QACjD,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CACxC,WAAW,CAAC,YAAmB,CAChC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA;QACvD,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,QAAQ,EAAE,QAAQ,EAAE;QACpB,IAAI,EAAE,IAAI,EAAE;QACZ,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;QAC1D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACrC,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QACrC,WAAW,EAAE,SAAS,EAAE;YACtB,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC;YAChC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;QACjC,YAAY,EAAE,eAAe,CAAC,gBAAgB,CAAC;QAC/C,mBAAmB,EAAE,oBAAoB,EAAE;QAC3C,oBAAoB,EAAE,sBAAsB,EAAE;KAC/C,CAAA;AACH,CAAC"}
@@ -1,11 +1,11 @@
1
- import { JSONObject } from '../interfaces';
1
+ import { JSONObject } from '../interfaces.js';
2
2
  export declare function pathExists(path: string): boolean;
3
3
  export declare function readDir(path: string): string[];
4
4
  export declare function readJSON(path: string): JSONObject | undefined;
5
5
  export declare function writeJSON(path: string, object: any): void;
6
6
  export declare function createDir(path: string): void;
7
7
  export declare function createTempDir(name: string): string;
8
- export declare function copy(from: string, to: string): void;
8
+ export declare function copyRecursively(from: string, to: string): void;
9
9
  export declare function removeRecursively(path: string): void;
10
10
  export declare function getHomeDirectory(): string;
11
11
  export declare function getCurrentDirectory(): string;
@@ -0,0 +1,45 @@
1
+ import { cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync, } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { basename } from 'path';
4
+ import { isWindows } from './environment-info.js';
5
+ import { execCommand } from './system.js';
6
+ export function pathExists(path) {
7
+ return existsSync(path);
8
+ }
9
+ export function readDir(path) {
10
+ return readdirSync(path);
11
+ }
12
+ export function readJSON(path) {
13
+ const fileContent = readFileSync(path, 'utf8');
14
+ if (!fileContent)
15
+ return undefined;
16
+ return JSON.parse(fileContent);
17
+ }
18
+ export function writeJSON(path, object) {
19
+ writeFileSync(path, JSON.stringify(object));
20
+ }
21
+ export function createDir(path) {
22
+ // If directory already exists, it will throw an error.
23
+ return mkdirSync(path);
24
+ }
25
+ export function createTempDir(name) {
26
+ return mkdtempSync(name);
27
+ }
28
+ export function copyRecursively(from, to) {
29
+ /*
30
+ * Copy a file or directory.
31
+ * src: if src is a directory it will copy everything inside of this directory, not the entire directory itself.
32
+ * dest: Note that if src is a file, dest cannot be a directory
33
+ */
34
+ cpSync(from, to, { recursive: true });
35
+ }
36
+ export function removeRecursively(path) {
37
+ rmSync(path, { recursive: true, force: true });
38
+ }
39
+ export function getHomeDirectory() {
40
+ return isWindows() ? homedir() : execCommand('eval echo ~${SUDO_USER}');
41
+ }
42
+ export function getCurrentDirectory() {
43
+ return basename(process.cwd());
44
+ }
45
+ //# sourceMappingURL=file-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../src/util/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,IAAI,CAAA;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAG/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC9C,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAA;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAW;IACjD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,uDAAuD;IACvD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,EAAU;IACtD;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AAChC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { execSync, spawn } from 'child_process';
2
+ export async function sleep(ms) {
3
+ return new Promise(resolve => setTimeout(resolve, ms));
4
+ }
5
+ export function execCommand(command) {
6
+ return String(execSync(command)).trim();
7
+ }
8
+ export function execCommandSafe(command) {
9
+ try {
10
+ return execCommand(command);
11
+ }
12
+ catch (e) {
13
+ return String(e);
14
+ }
15
+ }
16
+ export function spawnProcess(command, args, onClose) {
17
+ const childProcess = spawn(command, args, { shell: true }); // https://nodejs.org/api/child_process.html#child_process_spawning_bat_and_cmd_files_on_windows
18
+ childProcess.stdout.on('data', out => {
19
+ process.stdout.write(out);
20
+ });
21
+ childProcess.stderr.on('data', stderr => {
22
+ process.stderr.write(stderr);
23
+ });
24
+ childProcess.on('close', code => {
25
+ onClose && onClose();
26
+ process.stdout.write(`child process exited with code ${String(code)}`);
27
+ });
28
+ }
29
+ export function spawnNpmScript(script, onClose) {
30
+ spawnProcess('npm', ['run', script], onClose);
31
+ }
32
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/util/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE/C,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,OAAsB;IAEtB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA,CAAC,gGAAgG;IAC3J,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IACF,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IACF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QAC9B,OAAO,IAAI,OAAO,EAAE,CAAA;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAsB;IACnE,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC"}