@botpress/cli 0.0.5 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/errors.js +5 -1
- package/dist/app/index.js +5 -3
- package/dist/app/project.js +28 -2
- package/dist/event-emitter.js +62 -0
- package/dist/index.js +18 -17
- package/dist/logger/base-logger.js +14 -0
- package/dist/update-notif.js +47 -0
- package/dist/watcher.js +68 -0
- package/dist/worker/child-entrypoint.js +6 -16
- package/dist/worker/child-wrapper.js +109 -0
- package/dist/worker/config.js +2 -11
- package/dist/worker/index.js +4 -28
- package/dist/worker/is-child.js +4 -2
- package/dist/worker/worker-state.js +70 -0
- package/dist/worker/worker.js +87 -0
- package/package.json +5 -2
- package/dist/worker/listen-child.js +0 -89
package/dist/app/errors.js
CHANGED
|
@@ -39,13 +39,17 @@ var import_client = require("@botpress/client");
|
|
|
39
39
|
var import_axios = __toESM(require("axios"));
|
|
40
40
|
var import_verror = require("verror");
|
|
41
41
|
var consts = __toESM(require("../consts"));
|
|
42
|
+
const isKnownApiError = (e) => (0, import_client.isApiError)(e) && !(e instanceof import_client.UnknownError);
|
|
42
43
|
class BotpressCLIError extends import_verror.VError {
|
|
43
44
|
static wrap(thrown, message) {
|
|
44
45
|
const err = BotpressCLIError.map(thrown);
|
|
45
46
|
return new BotpressCLIError(err, message ?? "");
|
|
46
47
|
}
|
|
47
48
|
static map(thrown) {
|
|
48
|
-
if (
|
|
49
|
+
if (thrown instanceof import_client.UnknownError) {
|
|
50
|
+
return new HTTPError(500, "An unknown error has occurred.");
|
|
51
|
+
}
|
|
52
|
+
if (isKnownApiError(thrown)) {
|
|
49
53
|
return HTTPError.fromApi(thrown);
|
|
50
54
|
}
|
|
51
55
|
if (import_axios.default.isAxiosError(thrown)) {
|
package/dist/app/index.js
CHANGED
|
@@ -33,21 +33,23 @@ var import_chalk = __toESM(require("chalk"));
|
|
|
33
33
|
var import_fs = __toESM(require("fs"));
|
|
34
34
|
var consts = __toESM(require("../consts"));
|
|
35
35
|
var import_logger = require("../logger");
|
|
36
|
+
var import_update_notif = require("../update-notif");
|
|
36
37
|
var import_cache = require("./cache");
|
|
37
38
|
var import_file_paths = require("./file-paths");
|
|
38
39
|
var import_project = require("./project");
|
|
39
40
|
var import_user = require("./user");
|
|
40
41
|
var errors = __toESM(require("./errors"));
|
|
41
|
-
const logBootInfo = (logger, props) => {
|
|
42
|
+
const logBootInfo = async (logger, props) => {
|
|
42
43
|
const versionText = import_chalk.default.bold(`v${props.version}`);
|
|
43
44
|
logger.log(`Botpress CLI ${versionText}`, { prefix: "\u{1F916}" });
|
|
45
|
+
await (0, import_update_notif.notifyUpdate)(props, logger);
|
|
44
46
|
if (props.botpressHome !== consts.defaultBotpressHome) {
|
|
45
47
|
logger.log(`Using custom botpress home: ${props.botpressHome}`, { prefix: "\u{1F3E0}" });
|
|
46
48
|
}
|
|
47
49
|
};
|
|
48
50
|
const forProject = async (props) => {
|
|
49
51
|
const logger = new import_logger.Logger(props);
|
|
50
|
-
logBootInfo(logger, props);
|
|
52
|
+
await logBootInfo(logger, props);
|
|
51
53
|
const projectPaths = new import_file_paths.ProjectPaths(props);
|
|
52
54
|
const projectCachePath = projectPaths.abs.projectCacheFile;
|
|
53
55
|
const projectCache = await import_cache.FSConfigCache.loadFrom(projectCachePath);
|
|
@@ -59,7 +61,7 @@ const forProject = async (props) => {
|
|
|
59
61
|
};
|
|
60
62
|
const forUser = async (props) => {
|
|
61
63
|
const logger = new import_logger.Logger(props);
|
|
62
|
-
logBootInfo(logger, props);
|
|
64
|
+
await logBootInfo(logger, props);
|
|
63
65
|
const userPaths = new import_file_paths.UserPaths(props);
|
|
64
66
|
const userCacheFile = userPaths.abs.userCacheFile;
|
|
65
67
|
const userCache = await import_cache.FSConfigCache.loadFrom(userCacheFile);
|
package/dist/app/project.js
CHANGED
|
@@ -37,6 +37,7 @@ var consts = __toESM(require("../consts"));
|
|
|
37
37
|
var esbuildutils = __toESM(require("../esbuild-utils"));
|
|
38
38
|
var pathutils = __toESM(require("../path-utils"));
|
|
39
39
|
var requireutils = __toESM(require("../require-utils"));
|
|
40
|
+
var import_watcher = require("../watcher");
|
|
40
41
|
var import_worker = require("../worker");
|
|
41
42
|
var import_base = require("./base");
|
|
42
43
|
var errors = __toESM(require("./errors"));
|
|
@@ -162,7 +163,7 @@ class ProjectCommands extends import_base.BaseCommands {
|
|
|
162
163
|
const importPath = pathutils.toUnix(outfile);
|
|
163
164
|
const requireFrom = pathutils.rmExtension(importPath);
|
|
164
165
|
const code = `require('${requireFrom}').default.start(${argv.port})`;
|
|
165
|
-
await
|
|
166
|
+
const worker = await import_worker.Worker.spawn(
|
|
166
167
|
{
|
|
167
168
|
type: "code",
|
|
168
169
|
code,
|
|
@@ -172,7 +173,32 @@ class ProjectCommands extends import_base.BaseCommands {
|
|
|
172
173
|
}
|
|
173
174
|
},
|
|
174
175
|
this._logger
|
|
175
|
-
)
|
|
176
|
+
).catch((thrown) => {
|
|
177
|
+
throw errors.BotpressCLIError.wrap(thrown, "Could not start dev worker");
|
|
178
|
+
});
|
|
179
|
+
try {
|
|
180
|
+
const watcher = await import_watcher.FileWatcher.watch(
|
|
181
|
+
argv.workDir,
|
|
182
|
+
async (events) => {
|
|
183
|
+
const typescriptEvents = events.filter((e) => import_path.default.extname(e.path) === ".ts");
|
|
184
|
+
if (typescriptEvents.length === 0) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
this._logger.log("Changes detected, reloading...");
|
|
188
|
+
await this.buildProject(argv);
|
|
189
|
+
await worker.reload();
|
|
190
|
+
},
|
|
191
|
+
{ ignore: [this._paths.abs.outDir] }
|
|
192
|
+
);
|
|
193
|
+
await Promise.race([worker.wait(), watcher.wait()]);
|
|
194
|
+
await watcher.close();
|
|
195
|
+
} catch (thrown) {
|
|
196
|
+
throw errors.BotpressCLIError.wrap(thrown, "An error occurred while running the dev worker");
|
|
197
|
+
} finally {
|
|
198
|
+
if (worker.running) {
|
|
199
|
+
await worker.kill();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
176
202
|
}
|
|
177
203
|
async _deployDevIntegration(api, externalUrl, integrationDef) {
|
|
178
204
|
const devId = await this._projectCache.get("devId");
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var event_emitter_exports = {};
|
|
20
|
+
__export(event_emitter_exports, {
|
|
21
|
+
EventEmitter: () => EventEmitter
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(event_emitter_exports);
|
|
24
|
+
class EventEmitter {
|
|
25
|
+
listeners = {};
|
|
26
|
+
emit(type, event) {
|
|
27
|
+
const listeners = this.listeners[type];
|
|
28
|
+
if (!listeners) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
for (const listener of listeners) {
|
|
32
|
+
listener(event);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
once(type, listener) {
|
|
36
|
+
const wrapped = (event) => {
|
|
37
|
+
this.off(type, wrapped);
|
|
38
|
+
listener(event);
|
|
39
|
+
};
|
|
40
|
+
this.on(type, wrapped);
|
|
41
|
+
}
|
|
42
|
+
on(type, listener) {
|
|
43
|
+
if (!this.listeners[type]) {
|
|
44
|
+
this.listeners[type] = [];
|
|
45
|
+
}
|
|
46
|
+
this.listeners[type].push(listener);
|
|
47
|
+
}
|
|
48
|
+
off(type, listener) {
|
|
49
|
+
const listeners = this.listeners[type];
|
|
50
|
+
if (!listeners) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const index = listeners.indexOf(listener);
|
|
54
|
+
if (index !== -1) {
|
|
55
|
+
listeners.splice(index, 1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
EventEmitter
|
|
62
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,8 @@ var import_process = require("process");
|
|
|
22
22
|
var app = __toESM(require("./app"));
|
|
23
23
|
var config = __toESM(require("./config"));
|
|
24
24
|
var import_logger = require("./logger");
|
|
25
|
-
const { version } = require("../package.json");
|
|
25
|
+
const { name, version } = require("../package.json");
|
|
26
|
+
const pkg = { name, version };
|
|
26
27
|
const errorLogger = new import_logger.Logger();
|
|
27
28
|
const logError = (thrown) => {
|
|
28
29
|
const error = app.errors.BotpressCLIError.map(thrown);
|
|
@@ -51,7 +52,7 @@ import_yargs_extra.default.command(
|
|
|
51
52
|
async (argv) => {
|
|
52
53
|
try {
|
|
53
54
|
const parsed = parseArguments(config.loginSchema, argv);
|
|
54
|
-
const commands = await app.forUser({ ...parsed,
|
|
55
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
55
56
|
await commands.login(parsed);
|
|
56
57
|
commands.teardown();
|
|
57
58
|
} catch (e) {
|
|
@@ -65,7 +66,7 @@ import_yargs_extra.default.command(
|
|
|
65
66
|
async (argv) => {
|
|
66
67
|
try {
|
|
67
68
|
const parsed = parseArguments(config.logoutSchema, argv);
|
|
68
|
-
const commands = await app.forUser({ ...parsed,
|
|
69
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
69
70
|
await commands.logout();
|
|
70
71
|
commands.teardown();
|
|
71
72
|
} catch (e) {
|
|
@@ -80,7 +81,7 @@ import_yargs_extra.default.command(
|
|
|
80
81
|
async (argv) => {
|
|
81
82
|
try {
|
|
82
83
|
const parsed = parseArguments(config.createBotSchema, argv);
|
|
83
|
-
const commands = await app.forUser({ ...parsed,
|
|
84
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
84
85
|
await commands.createBot(parsed);
|
|
85
86
|
commands.teardown();
|
|
86
87
|
} catch (e) {
|
|
@@ -94,7 +95,7 @@ import_yargs_extra.default.command(
|
|
|
94
95
|
async (argv) => {
|
|
95
96
|
try {
|
|
96
97
|
const parsed = parseArguments(config.listBotsSchema, argv);
|
|
97
|
-
const commands = await app.forUser({ ...parsed,
|
|
98
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
98
99
|
await commands.listBots(parsed);
|
|
99
100
|
commands.teardown();
|
|
100
101
|
} catch (e) {
|
|
@@ -108,7 +109,7 @@ import_yargs_extra.default.command(
|
|
|
108
109
|
async (argv) => {
|
|
109
110
|
try {
|
|
110
111
|
const parsed = parseArguments(config.readBotSchema, argv);
|
|
111
|
-
const commands = await app.forUser({ ...parsed,
|
|
112
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
112
113
|
await commands.getBot(argv.botRef, parsed);
|
|
113
114
|
commands.teardown();
|
|
114
115
|
} catch (e) {
|
|
@@ -122,7 +123,7 @@ import_yargs_extra.default.command(
|
|
|
122
123
|
async (argv) => {
|
|
123
124
|
try {
|
|
124
125
|
const parsed = parseArguments(config.deleteBotSchema, argv);
|
|
125
|
-
const commands = await app.forUser({ ...parsed,
|
|
126
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
126
127
|
await commands.deleteBot(argv.botRef, parsed);
|
|
127
128
|
commands.teardown();
|
|
128
129
|
} catch (e) {
|
|
@@ -138,7 +139,7 @@ import_yargs_extra.default.command(
|
|
|
138
139
|
async (argv) => {
|
|
139
140
|
try {
|
|
140
141
|
const parsed = parseArguments(config.listIntegrationsSchema, argv);
|
|
141
|
-
const commands = await app.forUser({ ...parsed,
|
|
142
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
142
143
|
await commands.listIntegrations(parsed);
|
|
143
144
|
commands.teardown();
|
|
144
145
|
} catch (e) {
|
|
@@ -152,7 +153,7 @@ import_yargs_extra.default.command(
|
|
|
152
153
|
async (argv) => {
|
|
153
154
|
try {
|
|
154
155
|
const parsed = parseArguments(config.readIntegrationSchema, argv);
|
|
155
|
-
const commands = await app.forUser({ ...parsed,
|
|
156
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
156
157
|
await commands.getIntegration(argv.integrationRef, parsed);
|
|
157
158
|
commands.teardown();
|
|
158
159
|
} catch (e) {
|
|
@@ -166,7 +167,7 @@ import_yargs_extra.default.command(
|
|
|
166
167
|
async (argv) => {
|
|
167
168
|
try {
|
|
168
169
|
const parsed = parseArguments(config.readIntegrationSchema, argv);
|
|
169
|
-
const commands = await app.forUser({ ...parsed,
|
|
170
|
+
const commands = await app.forUser({ ...parsed, ...pkg });
|
|
170
171
|
await commands.deleteIntegration(argv.integrationRef, parsed);
|
|
171
172
|
commands.teardown();
|
|
172
173
|
} catch (e) {
|
|
@@ -181,7 +182,7 @@ import_yargs_extra.default.command(
|
|
|
181
182
|
async (argv) => {
|
|
182
183
|
try {
|
|
183
184
|
const parsed = parseArguments(config.bundleSchema, argv);
|
|
184
|
-
const commands = await app.forProject({ ...parsed,
|
|
185
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
185
186
|
await commands.bundleProject(parsed);
|
|
186
187
|
commands.teardown();
|
|
187
188
|
} catch (e) {
|
|
@@ -195,7 +196,7 @@ import_yargs_extra.default.command(
|
|
|
195
196
|
async (argv) => {
|
|
196
197
|
try {
|
|
197
198
|
const parsed = parseArguments(config.generateSchema, argv);
|
|
198
|
-
const commands = await app.forProject({ ...parsed,
|
|
199
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
199
200
|
await commands.generateTypings(parsed);
|
|
200
201
|
commands.teardown();
|
|
201
202
|
} catch (e) {
|
|
@@ -209,7 +210,7 @@ import_yargs_extra.default.command(
|
|
|
209
210
|
async (argv) => {
|
|
210
211
|
try {
|
|
211
212
|
const parsed = parseArguments(config.buildSchema, argv);
|
|
212
|
-
const commands = await app.forProject({ ...parsed,
|
|
213
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
213
214
|
await commands.buildProject(parsed);
|
|
214
215
|
commands.teardown();
|
|
215
216
|
} catch (e) {
|
|
@@ -223,7 +224,7 @@ import_yargs_extra.default.command(
|
|
|
223
224
|
async (argv) => {
|
|
224
225
|
try {
|
|
225
226
|
const parsed = parseArguments(config.serveSchema, argv);
|
|
226
|
-
const commands = await app.forProject({ ...parsed,
|
|
227
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
227
228
|
await commands.serveProject(parsed);
|
|
228
229
|
commands.teardown();
|
|
229
230
|
} catch (e) {
|
|
@@ -237,7 +238,7 @@ import_yargs_extra.default.command(
|
|
|
237
238
|
async (argv) => {
|
|
238
239
|
try {
|
|
239
240
|
const parsed = parseArguments(config.deploySchema, argv);
|
|
240
|
-
const commands = await app.forProject({ ...parsed,
|
|
241
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
241
242
|
await commands.deployProject(parsed);
|
|
242
243
|
commands.teardown();
|
|
243
244
|
} catch (e) {
|
|
@@ -251,7 +252,7 @@ import_yargs_extra.default.command(
|
|
|
251
252
|
async (argv) => {
|
|
252
253
|
try {
|
|
253
254
|
const parsed = parseArguments(config.devSchema, argv);
|
|
254
|
-
const commands = await app.forProject({ ...parsed,
|
|
255
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
255
256
|
await commands.devProject(parsed);
|
|
256
257
|
commands.teardown();
|
|
257
258
|
} catch (e) {
|
|
@@ -265,7 +266,7 @@ import_yargs_extra.default.command(
|
|
|
265
266
|
async (argv) => {
|
|
266
267
|
try {
|
|
267
268
|
const parsed = parseArguments(config.addSchema, argv);
|
|
268
|
-
const commands = await app.forProject({ ...parsed,
|
|
269
|
+
const commands = await app.forProject({ ...parsed, ...pkg });
|
|
269
270
|
await commands.installIntegration(argv.integrationRef, parsed);
|
|
270
271
|
commands.teardown();
|
|
271
272
|
} catch (e) {
|
|
@@ -27,6 +27,7 @@ __export(base_logger_exports, {
|
|
|
27
27
|
BaseLogger: () => BaseLogger
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(base_logger_exports);
|
|
30
|
+
var import_boxen = __toESM(require("boxen"));
|
|
30
31
|
var import_chalk = __toESM(require("chalk"));
|
|
31
32
|
var import_lodash = __toESM(require("lodash"));
|
|
32
33
|
var import_util = __toESM(require("util"));
|
|
@@ -76,6 +77,12 @@ const renderers = {
|
|
|
76
77
|
"\u25CF": disc,
|
|
77
78
|
" ": space
|
|
78
79
|
};
|
|
80
|
+
const BOX_OPTIONS = {
|
|
81
|
+
padding: 1,
|
|
82
|
+
margin: 1,
|
|
83
|
+
borderStyle: "round",
|
|
84
|
+
borderColor: "yellow"
|
|
85
|
+
};
|
|
79
86
|
class BaseLogger {
|
|
80
87
|
opts;
|
|
81
88
|
constructor(opts = {}) {
|
|
@@ -127,6 +134,13 @@ class BaseLogger {
|
|
|
127
134
|
}
|
|
128
135
|
this.log(message, { metadata, prefix: { symbol: "\xD7", fg: "red" } });
|
|
129
136
|
}
|
|
137
|
+
box(message) {
|
|
138
|
+
if (this.opts.json) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const box = (0, import_boxen.default)(message, BOX_OPTIONS);
|
|
142
|
+
this.print(box);
|
|
143
|
+
}
|
|
130
144
|
_resolvePrefix(prefix) {
|
|
131
145
|
if (!prefix) {
|
|
132
146
|
return;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var update_notif_exports = {};
|
|
26
|
+
__export(update_notif_exports, {
|
|
27
|
+
notifyUpdate: () => notifyUpdate
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(update_notif_exports);
|
|
30
|
+
var import_chalk = __toESM(require("chalk"));
|
|
31
|
+
var import_latest_version = __toESM(require("latest-version"));
|
|
32
|
+
const updateMsg = (props) => `${import_chalk.default.bold("Update available")} ${import_chalk.default.dim(props.version)} \u2192 ${import_chalk.default.green(props.latest)}
|
|
33
|
+
|
|
34
|
+
To update, run:
|
|
35
|
+
for npm ${import_chalk.default.cyan(`npm i -g ${props.name}`)}
|
|
36
|
+
for yarn ${import_chalk.default.cyan(`yarn global add ${props.name}`)}
|
|
37
|
+
for pnpm ${import_chalk.default.cyan(`pnpm i -g ${props.name}`)}`;
|
|
38
|
+
const notifyUpdate = async (props, logger) => {
|
|
39
|
+
const latest = await (0, import_latest_version.default)(props.name);
|
|
40
|
+
if (latest !== props.version) {
|
|
41
|
+
logger.box(updateMsg({ ...props, latest }));
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
notifyUpdate
|
|
47
|
+
});
|
package/dist/watcher.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var watcher_exports = {};
|
|
26
|
+
__export(watcher_exports, {
|
|
27
|
+
FileWatcher: () => FileWatcher
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(watcher_exports);
|
|
30
|
+
var import_watcher = __toESM(require("@parcel/watcher"));
|
|
31
|
+
var import_event_emitter = require("./event-emitter");
|
|
32
|
+
class FileWatcher {
|
|
33
|
+
constructor(subscription, errorEmitter) {
|
|
34
|
+
this.subscription = subscription;
|
|
35
|
+
this.errorEmitter = errorEmitter;
|
|
36
|
+
}
|
|
37
|
+
static async watch(dir, fn, opt) {
|
|
38
|
+
const eventEmitter = new import_event_emitter.EventEmitter();
|
|
39
|
+
const subscription = await import_watcher.default.subscribe(
|
|
40
|
+
dir,
|
|
41
|
+
async (err, events) => {
|
|
42
|
+
if (err) {
|
|
43
|
+
eventEmitter.emit("error", err);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
await fn(events);
|
|
48
|
+
} catch (thrown) {
|
|
49
|
+
eventEmitter.emit("error", thrown);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
opt
|
|
53
|
+
);
|
|
54
|
+
return new FileWatcher(subscription, eventEmitter);
|
|
55
|
+
}
|
|
56
|
+
async close() {
|
|
57
|
+
await this.subscription.unsubscribe();
|
|
58
|
+
this.errorEmitter.emit("close", {});
|
|
59
|
+
}
|
|
60
|
+
wait = () => new Promise((resolve, reject) => {
|
|
61
|
+
this.errorEmitter.once("error", reject);
|
|
62
|
+
this.errorEmitter.once("close", resolve);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
FileWatcher
|
|
68
|
+
});
|
|
@@ -27,31 +27,21 @@ __export(child_entrypoint_exports, {
|
|
|
27
27
|
ENTRY_POINT: () => ENTRY_POINT
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(child_entrypoint_exports);
|
|
30
|
-
var import_readline = __toESM(require("readline"));
|
|
31
30
|
var requireutils = __toESM(require("../require-utils"));
|
|
32
31
|
var import_config = require("./config");
|
|
33
32
|
var import_is_child = require("./is-child");
|
|
34
33
|
const ENTRY_POINT = __filename;
|
|
35
34
|
const childProcessEntrypoint = async (_props) => {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (key && key.ctrl && key.name === "c") {
|
|
40
|
-
process.exit(0);
|
|
41
|
-
}
|
|
42
|
-
if (key && key.name === "escape") {
|
|
43
|
-
process.exit(0);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
if (process.stdin.isTTY) {
|
|
47
|
-
process.stdin.setRawMode(true);
|
|
35
|
+
const rawConfig = process.env[import_config.CONFIG_ENV_KEY];
|
|
36
|
+
if (!rawConfig) {
|
|
37
|
+
throw new Error(`Config variable ${import_config.CONFIG_ENV_KEY} was not set`);
|
|
48
38
|
}
|
|
49
|
-
|
|
39
|
+
const config = import_config.configSchema.parse(JSON.parse(rawConfig));
|
|
50
40
|
if (config.type === "code") {
|
|
51
|
-
|
|
41
|
+
requireutils.requireJsCode(config.code);
|
|
52
42
|
}
|
|
53
43
|
if (config.type === "file") {
|
|
54
|
-
|
|
44
|
+
requireutils.requireJsFile(config.file);
|
|
55
45
|
}
|
|
56
46
|
};
|
|
57
47
|
if (import_is_child.processProps.type === "child") {
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var child_wrapper_exports = {};
|
|
26
|
+
__export(child_wrapper_exports, {
|
|
27
|
+
ChildProcessWrapper: () => ChildProcessWrapper
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(child_wrapper_exports);
|
|
30
|
+
var childProcess = __toESM(require("child_process"));
|
|
31
|
+
var import_child_entrypoint = require("./child-entrypoint");
|
|
32
|
+
var import_config = require("./config");
|
|
33
|
+
var import_is_child = require("./is-child");
|
|
34
|
+
const listenForChildSpawn = (child, logger) => new Promise((resolve, reject) => {
|
|
35
|
+
child.on("spawn", () => {
|
|
36
|
+
logger.debug(`Child process spawned with pid ${child.pid}`);
|
|
37
|
+
resolve();
|
|
38
|
+
});
|
|
39
|
+
child.on("error", (err) => {
|
|
40
|
+
logger.debug(`Child process error: ${err.message}`);
|
|
41
|
+
reject(err);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
const listenForChildExit = (child, logger) => new Promise((resolve, reject) => {
|
|
45
|
+
child.on("disconnect", () => {
|
|
46
|
+
logger.debug("Child process disconnected");
|
|
47
|
+
});
|
|
48
|
+
child.on("close", (exitCode, signal) => {
|
|
49
|
+
logger.debug(`Child process closed with code ${exitCode} and signal ${signal}`);
|
|
50
|
+
});
|
|
51
|
+
child.on("exit", (exitCode, signal) => {
|
|
52
|
+
logger.debug(`Child process exited with code ${exitCode} and signal ${signal}`);
|
|
53
|
+
resolve({ exitCode, signal });
|
|
54
|
+
});
|
|
55
|
+
child.on("error", (err) => {
|
|
56
|
+
logger.debug(`Child process error: ${err.message}`);
|
|
57
|
+
reject(err);
|
|
58
|
+
});
|
|
59
|
+
child.on("message", (message) => {
|
|
60
|
+
logger.debug(`Child process message: ${message}`);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
class ChildProcessWrapper {
|
|
64
|
+
constructor(_child, _exitPromise) {
|
|
65
|
+
this._child = _child;
|
|
66
|
+
this._exitPromise = _exitPromise;
|
|
67
|
+
}
|
|
68
|
+
static async spawn(config, logger) {
|
|
69
|
+
if (import_is_child.isChildProcess) {
|
|
70
|
+
throw new Error("Cannot spawn child process from child process");
|
|
71
|
+
}
|
|
72
|
+
const child = childProcess.fork(import_child_entrypoint.ENTRY_POINT, [], {
|
|
73
|
+
stdio: "inherit",
|
|
74
|
+
env: {
|
|
75
|
+
[import_is_child.CHILD_ENV_KEY]: import_is_child.CHILD_ENV_VALUE,
|
|
76
|
+
[import_config.CONFIG_ENV_KEY]: JSON.stringify(config),
|
|
77
|
+
...config.env
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const childSpawnPromise = listenForChildSpawn(child, logger);
|
|
81
|
+
const childExitPromise = listenForChildExit(child, logger);
|
|
82
|
+
const instance = new ChildProcessWrapper(child, childExitPromise);
|
|
83
|
+
childExitPromise.finally(() => {
|
|
84
|
+
instance._exited = true;
|
|
85
|
+
});
|
|
86
|
+
await childSpawnPromise;
|
|
87
|
+
return instance;
|
|
88
|
+
}
|
|
89
|
+
_exited = false;
|
|
90
|
+
async kill() {
|
|
91
|
+
if (this._exited) {
|
|
92
|
+
throw new Error("Child process already exited and cannot be killed");
|
|
93
|
+
}
|
|
94
|
+
this._child.kill();
|
|
95
|
+
const res = await this._exitPromise;
|
|
96
|
+
return res;
|
|
97
|
+
}
|
|
98
|
+
async listen() {
|
|
99
|
+
if (this._exited) {
|
|
100
|
+
throw new Error("Child process already exited and cannot be listened on");
|
|
101
|
+
}
|
|
102
|
+
const res = await this._exitPromise;
|
|
103
|
+
return res;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
+
0 && (module.exports = {
|
|
108
|
+
ChildProcessWrapper
|
|
109
|
+
});
|
package/dist/worker/config.js
CHANGED
|
@@ -25,8 +25,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
25
25
|
var config_exports = {};
|
|
26
26
|
__export(config_exports, {
|
|
27
27
|
CONFIG_ENV_KEY: () => CONFIG_ENV_KEY,
|
|
28
|
-
configSchema: () => configSchema
|
|
29
|
-
getConfigFromEnv: () => getConfigFromEnv
|
|
28
|
+
configSchema: () => configSchema
|
|
30
29
|
});
|
|
31
30
|
module.exports = __toCommonJS(config_exports);
|
|
32
31
|
var import_zod = __toESM(require("zod"));
|
|
@@ -43,16 +42,8 @@ const configSchema = import_zod.default.union([
|
|
|
43
42
|
env: import_zod.default.record(import_zod.default.string(), import_zod.default.string()).optional()
|
|
44
43
|
})
|
|
45
44
|
]);
|
|
46
|
-
const getConfigFromEnv = () => {
|
|
47
|
-
const config = process.env[CONFIG_ENV_KEY];
|
|
48
|
-
if (!config) {
|
|
49
|
-
throw new Error(`Config variable ${CONFIG_ENV_KEY} was not set`);
|
|
50
|
-
}
|
|
51
|
-
return configSchema.parse(JSON.parse(config));
|
|
52
|
-
};
|
|
53
45
|
// Annotate the CommonJS export names for ESM import in node:
|
|
54
46
|
0 && (module.exports = {
|
|
55
47
|
CONFIG_ENV_KEY,
|
|
56
|
-
configSchema
|
|
57
|
-
getConfigFromEnv
|
|
48
|
+
configSchema
|
|
58
49
|
});
|
package/dist/worker/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,39 +15,17 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
19
|
var worker_exports = {};
|
|
26
20
|
__export(worker_exports, {
|
|
27
|
-
Config: () =>
|
|
28
|
-
|
|
21
|
+
Config: () => import_config.Config,
|
|
22
|
+
Worker: () => import_worker.Worker
|
|
29
23
|
});
|
|
30
24
|
module.exports = __toCommonJS(worker_exports);
|
|
31
|
-
var childProcess = __toESM(require("child_process"));
|
|
32
|
-
var import_child_entrypoint = require("./child-entrypoint");
|
|
33
25
|
var import_config = require("./config");
|
|
34
|
-
var
|
|
35
|
-
var import_listen_child = require("./listen-child");
|
|
36
|
-
var import_config2 = require("./config");
|
|
37
|
-
const spawnChildProcess = async (config, logger) => {
|
|
38
|
-
if (import_is_child.isChildProcess) {
|
|
39
|
-
throw new Error("Cannot spawn child process from child process");
|
|
40
|
-
}
|
|
41
|
-
const child = childProcess.fork(import_child_entrypoint.ENTRY_POINT, [], {
|
|
42
|
-
stdio: "inherit",
|
|
43
|
-
env: {
|
|
44
|
-
[import_is_child.CHILD_ENV_KEY]: import_is_child.CHILD_ENV_VALUE,
|
|
45
|
-
[import_config.CONFIG_ENV_KEY]: JSON.stringify(config),
|
|
46
|
-
...config.env
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
return (0, import_listen_child.listenChild)(child, logger);
|
|
50
|
-
};
|
|
26
|
+
var import_worker = require("./worker");
|
|
51
27
|
// Annotate the CommonJS export names for ESM import in node:
|
|
52
28
|
0 && (module.exports = {
|
|
53
29
|
Config,
|
|
54
|
-
|
|
30
|
+
Worker
|
|
55
31
|
});
|
package/dist/worker/is-child.js
CHANGED
|
@@ -30,7 +30,8 @@ const getProcessProps = () => {
|
|
|
30
30
|
const type = process.env[CHILD_ENV_KEY] === CHILD_ENV_VALUE ? "child" : "main";
|
|
31
31
|
if (type === "main") {
|
|
32
32
|
return {
|
|
33
|
-
type
|
|
33
|
+
type,
|
|
34
|
+
pid: process.pid
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
if (!process.send) {
|
|
@@ -38,7 +39,8 @@ const getProcessProps = () => {
|
|
|
38
39
|
}
|
|
39
40
|
return {
|
|
40
41
|
type,
|
|
41
|
-
sendMessage: process.send
|
|
42
|
+
sendMessage: process.send,
|
|
43
|
+
pid: process.pid
|
|
42
44
|
};
|
|
43
45
|
};
|
|
44
46
|
const processProps = getProcessProps();
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var worker_state_exports = {};
|
|
20
|
+
__export(worker_state_exports, {
|
|
21
|
+
WorkerStateObserver: () => WorkerStateObserver
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(worker_state_exports);
|
|
24
|
+
class WorkerStateObserver {
|
|
25
|
+
_state;
|
|
26
|
+
_handlers = {
|
|
27
|
+
dead: [],
|
|
28
|
+
reloading: [],
|
|
29
|
+
live: [],
|
|
30
|
+
killing: [],
|
|
31
|
+
errored: []
|
|
32
|
+
};
|
|
33
|
+
constructor(initialState) {
|
|
34
|
+
this._state = initialState;
|
|
35
|
+
}
|
|
36
|
+
waitFor(status) {
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
const cb = () => {
|
|
39
|
+
this.off(status, cb);
|
|
40
|
+
resolve();
|
|
41
|
+
};
|
|
42
|
+
this.on(status, cb);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
on(status, handler) {
|
|
46
|
+
this._handlers[status].push(handler);
|
|
47
|
+
if (this._state.status === status) {
|
|
48
|
+
handler(this._state);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
off(status, handler) {
|
|
52
|
+
const index = this._handlers[status].indexOf(handler);
|
|
53
|
+
this._handlers[status].splice(index, 1);
|
|
54
|
+
}
|
|
55
|
+
get() {
|
|
56
|
+
return this._state;
|
|
57
|
+
}
|
|
58
|
+
set(newState) {
|
|
59
|
+
this._state = newState;
|
|
60
|
+
const { status } = newState;
|
|
61
|
+
for (const handler of this._handlers[status]) {
|
|
62
|
+
const fn = handler;
|
|
63
|
+
fn(newState);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
68
|
+
0 && (module.exports = {
|
|
69
|
+
WorkerStateObserver
|
|
70
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var worker_exports = {};
|
|
20
|
+
__export(worker_exports, {
|
|
21
|
+
Worker: () => Worker
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(worker_exports);
|
|
24
|
+
var import_child_wrapper = require("./child-wrapper");
|
|
25
|
+
var import_worker_state = require("./worker-state");
|
|
26
|
+
class Worker {
|
|
27
|
+
constructor(_config, _logger, _props = {}) {
|
|
28
|
+
this._config = _config;
|
|
29
|
+
this._logger = _logger;
|
|
30
|
+
this._props = _props;
|
|
31
|
+
}
|
|
32
|
+
static async spawn(config, logger, props) {
|
|
33
|
+
const instance = new Worker(config, logger, props);
|
|
34
|
+
await instance.reload();
|
|
35
|
+
return instance;
|
|
36
|
+
}
|
|
37
|
+
_state = new import_worker_state.WorkerStateObserver({ status: "dead", murdered: false });
|
|
38
|
+
get running() {
|
|
39
|
+
return this._state.get().status === "live";
|
|
40
|
+
}
|
|
41
|
+
kill = () => {
|
|
42
|
+
const state = this._state.get();
|
|
43
|
+
if (state.status !== "live") {
|
|
44
|
+
throw new Error("Cannot kill a child process that is not alive");
|
|
45
|
+
}
|
|
46
|
+
this._state.set({ status: "killing" });
|
|
47
|
+
return state.child.kill();
|
|
48
|
+
};
|
|
49
|
+
reload = async () => {
|
|
50
|
+
if (this._state.get().status === "reloading") {
|
|
51
|
+
this._logger.debug("Already reloading");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const previousState = this._state.get();
|
|
55
|
+
this._state.set({ status: "reloading" });
|
|
56
|
+
if (previousState.status === "live") {
|
|
57
|
+
await previousState.child.kill();
|
|
58
|
+
}
|
|
59
|
+
const child = await import_child_wrapper.ChildProcessWrapper.spawn(this._config, this._logger);
|
|
60
|
+
this._state.set({ status: "live", child });
|
|
61
|
+
void child.listen().catch((thrown) => {
|
|
62
|
+
this._state.set({ status: "errored", thrown });
|
|
63
|
+
}).then(() => {
|
|
64
|
+
const { status } = this._state.get();
|
|
65
|
+
if (status === "reloading") {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this._state.set({ status: "dead", murdered: status === "killing" });
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
wait = () => new Promise((resolve, reject) => {
|
|
72
|
+
this._state.on("dead", (state) => {
|
|
73
|
+
if (state.murdered || !this._props.hangOnExit) {
|
|
74
|
+
resolve();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this._logger.debug("Child process died of natural causes...");
|
|
78
|
+
});
|
|
79
|
+
this._state.on("errored", (state) => {
|
|
80
|
+
reject(state.thrown);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
Worker
|
|
87
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botpress/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "Botpress CLI",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "pnpm run type-check && pnpm run bundle",
|
|
@@ -19,15 +19,18 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@botpress/client": "0.0.6",
|
|
21
21
|
"@bpinternal/yargs-extra": "^0.0.2",
|
|
22
|
+
"@parcel/watcher": "^2.1.0",
|
|
22
23
|
"@types/lodash": "^4.14.191",
|
|
23
24
|
"@types/node": "^18.11.17",
|
|
24
25
|
"@types/verror": "^1.10.6",
|
|
25
26
|
"axios": "^1.2.5",
|
|
26
27
|
"bluebird": "^3.7.2",
|
|
28
|
+
"boxen": "5.1.2",
|
|
27
29
|
"chalk": "^4.1.2",
|
|
28
30
|
"chokidar": "^3.5.3",
|
|
29
31
|
"esbuild": "^0.15.18",
|
|
30
32
|
"json-schema-to-typescript": "^11.0.2",
|
|
33
|
+
"latest-version": "5.1.0",
|
|
31
34
|
"lodash": "^4.17.21",
|
|
32
35
|
"prompts": "^2.4.2",
|
|
33
36
|
"radash": "^9.5.0",
|
|
@@ -40,7 +43,7 @@
|
|
|
40
43
|
"zod-to-json-schema": "^3.20.1"
|
|
41
44
|
},
|
|
42
45
|
"devDependencies": {
|
|
43
|
-
"@botpress/sdk": "0.0.
|
|
46
|
+
"@botpress/sdk": "0.0.7",
|
|
44
47
|
"@types/bluebird": "^3.5.38",
|
|
45
48
|
"@types/prompts": "^2.0.14",
|
|
46
49
|
"@types/semver": "^7.3.11",
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var listen_child_exports = {};
|
|
20
|
-
__export(listen_child_exports, {
|
|
21
|
-
listenChild: () => listenChild
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(listen_child_exports);
|
|
24
|
-
const listenChild = async (child, logger) => {
|
|
25
|
-
let isClosed = false;
|
|
26
|
-
return new Promise((resolve, reject) => {
|
|
27
|
-
child.on("close", (code) => {
|
|
28
|
-
if (isClosed) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
isClosed = true;
|
|
32
|
-
const msg = `Child process closed with code ${code}`;
|
|
33
|
-
if (code) {
|
|
34
|
-
logger.error(msg);
|
|
35
|
-
reject(new Error(msg));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
logger.log(msg);
|
|
39
|
-
resolve();
|
|
40
|
-
});
|
|
41
|
-
child.on("disconnect", () => {
|
|
42
|
-
if (isClosed) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const msg = "Child process disconnected";
|
|
46
|
-
logger.debug(msg);
|
|
47
|
-
});
|
|
48
|
-
child.on("exit", (code, signal) => {
|
|
49
|
-
if (isClosed) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
isClosed = true;
|
|
53
|
-
const msg = `Child process exited with code ${code} and signal ${signal}`;
|
|
54
|
-
if (code || signal) {
|
|
55
|
-
logger.error(msg);
|
|
56
|
-
reject(new Error(msg));
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
logger.debug(msg);
|
|
60
|
-
resolve();
|
|
61
|
-
});
|
|
62
|
-
child.on("error", (err) => {
|
|
63
|
-
if (isClosed) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const msg = `Child process error: ${err.message}`;
|
|
67
|
-
logger.error(msg);
|
|
68
|
-
reject(err);
|
|
69
|
-
});
|
|
70
|
-
child.on("message", (message) => {
|
|
71
|
-
if (isClosed) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const msg = `Child process message: ${message}`;
|
|
75
|
-
logger.log(msg);
|
|
76
|
-
});
|
|
77
|
-
child.on("spawn", () => {
|
|
78
|
-
if (isClosed) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const msg = "Child process spawned";
|
|
82
|
-
logger.debug(msg);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
};
|
|
86
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
87
|
-
0 && (module.exports = {
|
|
88
|
-
listenChild
|
|
89
|
-
});
|