@positronic/cli 0.0.3 → 0.0.4
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/src/commands/helpers.js +11 -25
- package/dist/types/commands/helpers.d.ts.map +1 -1
- package/package.json +5 -1
- package/dist/src/commands/brain.test.js +0 -2936
- package/dist/src/commands/helpers.test.js +0 -832
- package/dist/src/commands/project.test.js +0 -1201
- package/dist/src/commands/resources.test.js +0 -2511
- package/dist/src/commands/schedule.test.js +0 -1235
- package/dist/src/commands/secret.test.d.js +0 -1
- package/dist/src/commands/secret.test.js +0 -761
- package/dist/src/commands/server.test.js +0 -1237
- package/dist/src/commands/test-utils.js +0 -737
- package/dist/src/components/secret-sync.js +0 -303
- package/dist/src/test/mock-api-client.js +0 -371
- package/dist/src/test/test-dev-server.js +0 -1376
- package/dist/types/commands/test-utils.d.ts +0 -45
- package/dist/types/commands/test-utils.d.ts.map +0 -1
- package/dist/types/components/secret-sync.d.ts +0 -9
- package/dist/types/components/secret-sync.d.ts.map +0 -1
- package/dist/types/test/mock-api-client.d.ts +0 -25
- package/dist/types/test/mock-api-client.d.ts.map +0 -1
- package/dist/types/test/test-dev-server.d.ts +0 -129
- package/dist/types/test/test-dev-server.d.ts.map +0 -1
- package/src/cli.ts +0 -997
- package/src/commands/backend.ts +0 -63
- package/src/commands/brain.test.ts +0 -1004
- package/src/commands/brain.ts +0 -215
- package/src/commands/helpers.test.ts +0 -487
- package/src/commands/helpers.ts +0 -870
- package/src/commands/project-config-manager.ts +0 -152
- package/src/commands/project.test.ts +0 -502
- package/src/commands/project.ts +0 -109
- package/src/commands/resources.test.ts +0 -1052
- package/src/commands/resources.ts +0 -97
- package/src/commands/schedule.test.ts +0 -481
- package/src/commands/schedule.ts +0 -65
- package/src/commands/secret.test.ts +0 -210
- package/src/commands/secret.ts +0 -50
- package/src/commands/server.test.ts +0 -493
- package/src/commands/server.ts +0 -353
- package/src/commands/test-utils.ts +0 -324
- package/src/components/brain-history.tsx +0 -198
- package/src/components/brain-list.tsx +0 -105
- package/src/components/brain-rerun.tsx +0 -111
- package/src/components/brain-show.tsx +0 -92
- package/src/components/error.tsx +0 -24
- package/src/components/project-add.tsx +0 -59
- package/src/components/project-create.tsx +0 -83
- package/src/components/project-list.tsx +0 -83
- package/src/components/project-remove.tsx +0 -55
- package/src/components/project-select.tsx +0 -200
- package/src/components/project-show.tsx +0 -58
- package/src/components/resource-clear.tsx +0 -127
- package/src/components/resource-delete.tsx +0 -160
- package/src/components/resource-list.tsx +0 -177
- package/src/components/resource-sync.tsx +0 -170
- package/src/components/resource-types.tsx +0 -55
- package/src/components/resource-upload.tsx +0 -182
- package/src/components/schedule-create.tsx +0 -90
- package/src/components/schedule-delete.tsx +0 -116
- package/src/components/schedule-list.tsx +0 -186
- package/src/components/schedule-runs.tsx +0 -151
- package/src/components/secret-bulk.tsx +0 -79
- package/src/components/secret-create.tsx +0 -49
- package/src/components/secret-delete.tsx +0 -41
- package/src/components/secret-list.tsx +0 -41
- package/src/components/watch.tsx +0 -155
- package/src/hooks/useApi.ts +0 -183
- package/src/positronic.ts +0 -40
- package/src/test/data/resources/config.json +0 -1
- package/src/test/data/resources/data/config.json +0 -1
- package/src/test/data/resources/data/logo.png +0 -2
- package/src/test/data/resources/docs/api.md +0 -3
- package/src/test/data/resources/docs/readme.md +0 -3
- package/src/test/data/resources/example.md +0 -3
- package/src/test/data/resources/file with spaces.txt +0 -1
- package/src/test/data/resources/readme.md +0 -3
- package/src/test/data/resources/test.txt +0 -1
- package/src/test/mock-api-client.ts +0 -145
- package/src/test/test-dev-server.ts +0 -1003
- package/tsconfig.json +0 -11
|
@@ -1,737 +0,0 @@
|
|
|
1
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
-
try {
|
|
3
|
-
var info = gen[key](arg);
|
|
4
|
-
var value = info.value;
|
|
5
|
-
} catch (error) {
|
|
6
|
-
reject(error);
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
if (info.done) {
|
|
10
|
-
resolve(value);
|
|
11
|
-
} else {
|
|
12
|
-
Promise.resolve(value).then(_next, _throw);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function _async_to_generator(fn) {
|
|
16
|
-
return function() {
|
|
17
|
-
var self = this, args = arguments;
|
|
18
|
-
return new Promise(function(resolve, reject) {
|
|
19
|
-
var gen = fn.apply(self, args);
|
|
20
|
-
function _next(value) {
|
|
21
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
-
}
|
|
23
|
-
function _throw(err) {
|
|
24
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
-
}
|
|
26
|
-
_next(undefined);
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function _class_call_check(instance, Constructor) {
|
|
31
|
-
if (!(instance instanceof Constructor)) {
|
|
32
|
-
throw new TypeError("Cannot call a class as a function");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function _defineProperties(target, props) {
|
|
36
|
-
for(var i = 0; i < props.length; i++){
|
|
37
|
-
var descriptor = props[i];
|
|
38
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
39
|
-
descriptor.configurable = true;
|
|
40
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
41
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
45
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
46
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
47
|
-
return Constructor;
|
|
48
|
-
}
|
|
49
|
-
function _define_property(obj, key, value) {
|
|
50
|
-
if (key in obj) {
|
|
51
|
-
Object.defineProperty(obj, key, {
|
|
52
|
-
value: value,
|
|
53
|
-
enumerable: true,
|
|
54
|
-
configurable: true,
|
|
55
|
-
writable: true
|
|
56
|
-
});
|
|
57
|
-
} else {
|
|
58
|
-
obj[key] = value;
|
|
59
|
-
}
|
|
60
|
-
return obj;
|
|
61
|
-
}
|
|
62
|
-
function _type_of(obj) {
|
|
63
|
-
"@swc/helpers - typeof";
|
|
64
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
65
|
-
}
|
|
66
|
-
function _ts_generator(thisArg, body) {
|
|
67
|
-
var f, y, t, _ = {
|
|
68
|
-
label: 0,
|
|
69
|
-
sent: function() {
|
|
70
|
-
if (t[0] & 1) throw t[1];
|
|
71
|
-
return t[1];
|
|
72
|
-
},
|
|
73
|
-
trys: [],
|
|
74
|
-
ops: []
|
|
75
|
-
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
76
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
77
|
-
return this;
|
|
78
|
-
}), g;
|
|
79
|
-
function verb(n) {
|
|
80
|
-
return function(v) {
|
|
81
|
-
return step([
|
|
82
|
-
n,
|
|
83
|
-
v
|
|
84
|
-
]);
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function step(op) {
|
|
88
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
89
|
-
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
90
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
91
|
-
if (y = 0, t) op = [
|
|
92
|
-
op[0] & 2,
|
|
93
|
-
t.value
|
|
94
|
-
];
|
|
95
|
-
switch(op[0]){
|
|
96
|
-
case 0:
|
|
97
|
-
case 1:
|
|
98
|
-
t = op;
|
|
99
|
-
break;
|
|
100
|
-
case 4:
|
|
101
|
-
_.label++;
|
|
102
|
-
return {
|
|
103
|
-
value: op[1],
|
|
104
|
-
done: false
|
|
105
|
-
};
|
|
106
|
-
case 5:
|
|
107
|
-
_.label++;
|
|
108
|
-
y = op[1];
|
|
109
|
-
op = [
|
|
110
|
-
0
|
|
111
|
-
];
|
|
112
|
-
continue;
|
|
113
|
-
case 7:
|
|
114
|
-
op = _.ops.pop();
|
|
115
|
-
_.trys.pop();
|
|
116
|
-
continue;
|
|
117
|
-
default:
|
|
118
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
119
|
-
_ = 0;
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
123
|
-
_.label = op[1];
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
if (op[0] === 6 && _.label < t[1]) {
|
|
127
|
-
_.label = t[1];
|
|
128
|
-
t = op;
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
if (t && _.label < t[2]) {
|
|
132
|
-
_.label = t[2];
|
|
133
|
-
_.ops.push(op);
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
if (t[2]) _.ops.pop();
|
|
137
|
-
_.trys.pop();
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
op = body.call(thisArg, _);
|
|
141
|
-
} catch (e) {
|
|
142
|
-
op = [
|
|
143
|
-
6,
|
|
144
|
-
e
|
|
145
|
-
];
|
|
146
|
-
y = 0;
|
|
147
|
-
} finally{
|
|
148
|
-
f = t = 0;
|
|
149
|
-
}
|
|
150
|
-
if (op[0] & 5) throw op[1];
|
|
151
|
-
return {
|
|
152
|
-
value: op[0] ? op[1] : void 0,
|
|
153
|
-
done: true
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
function _ts_values(o) {
|
|
158
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
159
|
-
if (m) return m.call(o);
|
|
160
|
-
if (o && typeof o.length === "number") return {
|
|
161
|
-
next: function() {
|
|
162
|
-
if (o && i >= o.length) o = void 0;
|
|
163
|
-
return {
|
|
164
|
-
value: o && o[i++],
|
|
165
|
-
done: !o
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
170
|
-
}
|
|
171
|
-
import React from 'react';
|
|
172
|
-
import { render } from 'ink-testing-library';
|
|
173
|
-
import * as fs from 'fs';
|
|
174
|
-
import * as path from 'path';
|
|
175
|
-
import * as os from 'os';
|
|
176
|
-
import { fileURLToPath } from 'url';
|
|
177
|
-
import process from 'process';
|
|
178
|
-
import { TestDevServer } from '../test/test-dev-server.js';
|
|
179
|
-
import { buildCli } from '../cli.js';
|
|
180
|
-
import caz from 'caz';
|
|
181
|
-
var __filename = fileURLToPath(import.meta.url);
|
|
182
|
-
var __dirname = path.dirname(__filename);
|
|
183
|
-
// Singleton cache for the template to avoid repeated npm installs
|
|
184
|
-
// This is shared across all tests in a test run and should NOT be deleted
|
|
185
|
-
// by individual test cleanup. It's cleaned up automatically when the process exits.
|
|
186
|
-
var cachedTemplatePath = null;
|
|
187
|
-
function getCachedTemplate() {
|
|
188
|
-
return _async_to_generator(function() {
|
|
189
|
-
var devPath, originalTemplate, tempCopyDir, cazOptions, originalStdoutWrite, originalStderrWrite, originalConsoleLog, originalConsoleError;
|
|
190
|
-
return _ts_generator(this, function(_state) {
|
|
191
|
-
switch(_state.label){
|
|
192
|
-
case 0:
|
|
193
|
-
// Check if cached template exists and is valid
|
|
194
|
-
if (cachedTemplatePath && fs.existsSync(cachedTemplatePath)) {
|
|
195
|
-
return [
|
|
196
|
-
2,
|
|
197
|
-
cachedTemplatePath
|
|
198
|
-
];
|
|
199
|
-
}
|
|
200
|
-
// Create cache only once per test run
|
|
201
|
-
devPath = path.resolve(__dirname, '../../../');
|
|
202
|
-
originalTemplate = path.resolve(devPath, 'template-new-project');
|
|
203
|
-
// First, copy template to temp location so caz can mess with that copy
|
|
204
|
-
tempCopyDir = fs.mkdtempSync(path.join(os.tmpdir(), 'positronic-template-copy-'));
|
|
205
|
-
fs.cpSync(originalTemplate, tempCopyDir, {
|
|
206
|
-
recursive: true
|
|
207
|
-
});
|
|
208
|
-
// Now generate the actual cached template in another temp directory
|
|
209
|
-
cachedTemplatePath = fs.mkdtempSync(path.join(os.tmpdir(), 'positronic-cached-template-'));
|
|
210
|
-
// Run caz once to generate a clean template
|
|
211
|
-
cazOptions = {
|
|
212
|
-
name: 'test-project',
|
|
213
|
-
backend: 'none',
|
|
214
|
-
install: false,
|
|
215
|
-
claudemd: false,
|
|
216
|
-
force: true
|
|
217
|
-
};
|
|
218
|
-
// Temporarily hijack all output streams to suppress caz output
|
|
219
|
-
originalStdoutWrite = process.stdout.write;
|
|
220
|
-
originalStderrWrite = process.stderr.write;
|
|
221
|
-
originalConsoleLog = console.log;
|
|
222
|
-
originalConsoleError = console.error;
|
|
223
|
-
process.stdout.write = function() {
|
|
224
|
-
return true;
|
|
225
|
-
};
|
|
226
|
-
process.stderr.write = function() {
|
|
227
|
-
return true;
|
|
228
|
-
};
|
|
229
|
-
console.log = function() {};
|
|
230
|
-
console.error = function() {};
|
|
231
|
-
_state.label = 1;
|
|
232
|
-
case 1:
|
|
233
|
-
_state.trys.push([
|
|
234
|
-
1,
|
|
235
|
-
,
|
|
236
|
-
3,
|
|
237
|
-
4
|
|
238
|
-
]);
|
|
239
|
-
return [
|
|
240
|
-
4,
|
|
241
|
-
caz.default(tempCopyDir, cachedTemplatePath, cazOptions)
|
|
242
|
-
];
|
|
243
|
-
case 2:
|
|
244
|
-
_state.sent();
|
|
245
|
-
return [
|
|
246
|
-
3,
|
|
247
|
-
4
|
|
248
|
-
];
|
|
249
|
-
case 3:
|
|
250
|
-
// Restore original output streams
|
|
251
|
-
process.stdout.write = originalStdoutWrite;
|
|
252
|
-
process.stderr.write = originalStderrWrite;
|
|
253
|
-
console.log = originalConsoleLog;
|
|
254
|
-
console.error = originalConsoleError;
|
|
255
|
-
return [
|
|
256
|
-
7
|
|
257
|
-
];
|
|
258
|
-
case 4:
|
|
259
|
-
// Clean up the temp copy directory
|
|
260
|
-
fs.rmSync(tempCopyDir, {
|
|
261
|
-
recursive: true,
|
|
262
|
-
force: true
|
|
263
|
-
});
|
|
264
|
-
return [
|
|
265
|
-
2,
|
|
266
|
-
cachedTemplatePath
|
|
267
|
-
];
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
})();
|
|
271
|
-
}
|
|
272
|
-
// Helper function to copy test resources from test data directory
|
|
273
|
-
function copyTestResources(targetDir) {
|
|
274
|
-
var testDataPath = path.join(__dirname, '../test/data/resources');
|
|
275
|
-
var targetResourcesPath = path.join(targetDir, 'resources');
|
|
276
|
-
// Remove existing resources directory if it exists
|
|
277
|
-
if (fs.existsSync(targetResourcesPath)) {
|
|
278
|
-
fs.rmSync(targetResourcesPath, {
|
|
279
|
-
recursive: true,
|
|
280
|
-
force: true
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
// Copy the test data resources
|
|
284
|
-
fs.cpSync(testDataPath, targetResourcesPath, {
|
|
285
|
-
recursive: true
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
// Helper function to create a minimal Positronic project structure
|
|
289
|
-
export function createMinimalProject(dir) {
|
|
290
|
-
return _async_to_generator(function() {
|
|
291
|
-
var cachedTemplate, configPath, config;
|
|
292
|
-
return _ts_generator(this, function(_state) {
|
|
293
|
-
switch(_state.label){
|
|
294
|
-
case 0:
|
|
295
|
-
return [
|
|
296
|
-
4,
|
|
297
|
-
getCachedTemplate()
|
|
298
|
-
];
|
|
299
|
-
case 1:
|
|
300
|
-
cachedTemplate = _state.sent();
|
|
301
|
-
// Copy the cached template to the target directory
|
|
302
|
-
fs.cpSync(cachedTemplate, dir, {
|
|
303
|
-
recursive: true
|
|
304
|
-
});
|
|
305
|
-
copyTestResources(dir);
|
|
306
|
-
// Update positronic.config.json with the correct project name if it exists
|
|
307
|
-
configPath = path.join(dir, 'positronic.config.json');
|
|
308
|
-
if (fs.existsSync(configPath)) {
|
|
309
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
310
|
-
config.name = 'test-project';
|
|
311
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
312
|
-
}
|
|
313
|
-
return [
|
|
314
|
-
2
|
|
315
|
-
];
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
})();
|
|
319
|
-
}
|
|
320
|
-
export var TestEnv = /*#__PURE__*/ function() {
|
|
321
|
-
"use strict";
|
|
322
|
-
function TestEnv(server) {
|
|
323
|
-
_class_call_check(this, TestEnv);
|
|
324
|
-
_define_property(this, "server", void 0);
|
|
325
|
-
_define_property(this, "serverHandle", void 0);
|
|
326
|
-
this.server = server;
|
|
327
|
-
this.serverHandle = null;
|
|
328
|
-
}
|
|
329
|
-
_create_class(TestEnv, [
|
|
330
|
-
{
|
|
331
|
-
key: "projectRootDir",
|
|
332
|
-
get: function get() {
|
|
333
|
-
return this.server.projectRootDir;
|
|
334
|
-
}
|
|
335
|
-
},
|
|
336
|
-
{
|
|
337
|
-
key: "setup",
|
|
338
|
-
value: function setup(setup) {
|
|
339
|
-
setup(this.projectRootDir);
|
|
340
|
-
return this;
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
key: "start",
|
|
345
|
-
value: function start() {
|
|
346
|
-
return _async_to_generator(function() {
|
|
347
|
-
var _this, _;
|
|
348
|
-
return _ts_generator(this, function(_state) {
|
|
349
|
-
switch(_state.label){
|
|
350
|
-
case 0:
|
|
351
|
-
_this = this;
|
|
352
|
-
if (this.serverHandle) {
|
|
353
|
-
throw new Error('Server already started');
|
|
354
|
-
}
|
|
355
|
-
_ = this;
|
|
356
|
-
return [
|
|
357
|
-
4,
|
|
358
|
-
this.server.start()
|
|
359
|
-
];
|
|
360
|
-
case 1:
|
|
361
|
-
_.serverHandle = _state.sent();
|
|
362
|
-
return [
|
|
363
|
-
2,
|
|
364
|
-
function(argv) {
|
|
365
|
-
return _async_to_generator(function() {
|
|
366
|
-
return _ts_generator(this, function(_state) {
|
|
367
|
-
if (!this.serverHandle) {
|
|
368
|
-
throw new Error('Server not started');
|
|
369
|
-
}
|
|
370
|
-
return [
|
|
371
|
-
2,
|
|
372
|
-
px(argv, {
|
|
373
|
-
server: this.server,
|
|
374
|
-
projectRootDir: this.projectRootDir
|
|
375
|
-
})
|
|
376
|
-
];
|
|
377
|
-
});
|
|
378
|
-
}).call(_this);
|
|
379
|
-
}
|
|
380
|
-
];
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
}).call(this);
|
|
384
|
-
}
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
key: "cleanup",
|
|
388
|
-
value: function cleanup() {
|
|
389
|
-
fs.rmSync(this.projectRootDir, {
|
|
390
|
-
recursive: true,
|
|
391
|
-
force: true
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
key: "stop",
|
|
397
|
-
value: function stop() {
|
|
398
|
-
return _async_to_generator(function() {
|
|
399
|
-
return _ts_generator(this, function(_state) {
|
|
400
|
-
switch(_state.label){
|
|
401
|
-
case 0:
|
|
402
|
-
if (!this.serverHandle) {
|
|
403
|
-
throw new Error('Server not started');
|
|
404
|
-
}
|
|
405
|
-
this.serverHandle.kill();
|
|
406
|
-
this.serverHandle = null;
|
|
407
|
-
return [
|
|
408
|
-
4,
|
|
409
|
-
this.server.stop()
|
|
410
|
-
];
|
|
411
|
-
case 1:
|
|
412
|
-
_state.sent();
|
|
413
|
-
return [
|
|
414
|
-
2
|
|
415
|
-
];
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}).call(this);
|
|
419
|
-
}
|
|
420
|
-
},
|
|
421
|
-
{
|
|
422
|
-
key: "stopAndCleanup",
|
|
423
|
-
value: function stopAndCleanup() {
|
|
424
|
-
return _async_to_generator(function() {
|
|
425
|
-
return _ts_generator(this, function(_state) {
|
|
426
|
-
switch(_state.label){
|
|
427
|
-
case 0:
|
|
428
|
-
return [
|
|
429
|
-
4,
|
|
430
|
-
this.stop()
|
|
431
|
-
];
|
|
432
|
-
case 1:
|
|
433
|
-
_state.sent();
|
|
434
|
-
this.cleanup();
|
|
435
|
-
return [
|
|
436
|
-
2
|
|
437
|
-
];
|
|
438
|
-
}
|
|
439
|
-
});
|
|
440
|
-
}).call(this);
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
]);
|
|
444
|
-
return TestEnv;
|
|
445
|
-
}();
|
|
446
|
-
export function createTestEnv() {
|
|
447
|
-
return _async_to_generator(function() {
|
|
448
|
-
var tempDir, devServer;
|
|
449
|
-
return _ts_generator(this, function(_state) {
|
|
450
|
-
switch(_state.label){
|
|
451
|
-
case 0:
|
|
452
|
-
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'positronic-server-test-'));
|
|
453
|
-
return [
|
|
454
|
-
4,
|
|
455
|
-
createMinimalProject(tempDir)
|
|
456
|
-
];
|
|
457
|
-
case 1:
|
|
458
|
-
_state.sent();
|
|
459
|
-
// Create test dev server instance
|
|
460
|
-
devServer = new TestDevServer(tempDir);
|
|
461
|
-
return [
|
|
462
|
-
2,
|
|
463
|
-
new TestEnv(devServer)
|
|
464
|
-
];
|
|
465
|
-
}
|
|
466
|
-
});
|
|
467
|
-
})();
|
|
468
|
-
}
|
|
469
|
-
// Helper function to wait for types file to contain specific content
|
|
470
|
-
export function waitForTypesFile(typesPath, expectedContent) {
|
|
471
|
-
var maxWaitMs = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 5000;
|
|
472
|
-
return _async_to_generator(function() {
|
|
473
|
-
var _loop, startTime, contentToCheck, _ret;
|
|
474
|
-
return _ts_generator(this, function(_state) {
|
|
475
|
-
switch(_state.label){
|
|
476
|
-
case 0:
|
|
477
|
-
_loop = function() {
|
|
478
|
-
var content;
|
|
479
|
-
return _ts_generator(this, function(_state) {
|
|
480
|
-
switch(_state.label){
|
|
481
|
-
case 0:
|
|
482
|
-
if (fs.existsSync(typesPath)) {
|
|
483
|
-
content = fs.readFileSync(typesPath, 'utf-8');
|
|
484
|
-
// Check if all expected content is present
|
|
485
|
-
if (contentToCheck.every(function(expected) {
|
|
486
|
-
return content.includes(expected);
|
|
487
|
-
})) {
|
|
488
|
-
return [
|
|
489
|
-
2,
|
|
490
|
-
{
|
|
491
|
-
v: content
|
|
492
|
-
}
|
|
493
|
-
];
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
return [
|
|
497
|
-
4,
|
|
498
|
-
new Promise(function(resolve) {
|
|
499
|
-
return setTimeout(resolve, 100);
|
|
500
|
-
})
|
|
501
|
-
];
|
|
502
|
-
case 1:
|
|
503
|
-
_state.sent();
|
|
504
|
-
return [
|
|
505
|
-
2
|
|
506
|
-
];
|
|
507
|
-
}
|
|
508
|
-
});
|
|
509
|
-
};
|
|
510
|
-
startTime = Date.now();
|
|
511
|
-
contentToCheck = Array.isArray(expectedContent) ? expectedContent : [
|
|
512
|
-
expectedContent
|
|
513
|
-
];
|
|
514
|
-
_state.label = 1;
|
|
515
|
-
case 1:
|
|
516
|
-
if (!(Date.now() - startTime < maxWaitMs)) return [
|
|
517
|
-
3,
|
|
518
|
-
3
|
|
519
|
-
];
|
|
520
|
-
return [
|
|
521
|
-
5,
|
|
522
|
-
_ts_values(_loop())
|
|
523
|
-
];
|
|
524
|
-
case 2:
|
|
525
|
-
_ret = _state.sent();
|
|
526
|
-
if (_type_of(_ret) === "object") return [
|
|
527
|
-
2,
|
|
528
|
-
_ret.v
|
|
529
|
-
];
|
|
530
|
-
return [
|
|
531
|
-
3,
|
|
532
|
-
1
|
|
533
|
-
];
|
|
534
|
-
case 3:
|
|
535
|
-
return [
|
|
536
|
-
2,
|
|
537
|
-
''
|
|
538
|
-
];
|
|
539
|
-
}
|
|
540
|
-
});
|
|
541
|
-
})();
|
|
542
|
-
}
|
|
543
|
-
export function px(_0) {
|
|
544
|
-
return _async_to_generator(function(argv) {
|
|
545
|
-
var options, server, projectRootDir, configDir, instance;
|
|
546
|
-
var _arguments = arguments;
|
|
547
|
-
return _ts_generator(this, function(_state) {
|
|
548
|
-
switch(_state.label){
|
|
549
|
-
case 0:
|
|
550
|
-
options = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
551
|
-
server = options.server, projectRootDir = options.projectRootDir, configDir = options.configDir;
|
|
552
|
-
instance = null;
|
|
553
|
-
return [
|
|
554
|
-
4,
|
|
555
|
-
runCli(argv, {
|
|
556
|
-
server: server,
|
|
557
|
-
configDir: configDir
|
|
558
|
-
})
|
|
559
|
-
];
|
|
560
|
-
case 1:
|
|
561
|
-
instance = _state.sent();
|
|
562
|
-
// const { lastFrame, rerender, unmount, frames, stdin, stdout, stderr } = instance!;
|
|
563
|
-
return [
|
|
564
|
-
2,
|
|
565
|
-
{
|
|
566
|
-
waitForOutput: function(regex) {
|
|
567
|
-
var maxTries = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 10;
|
|
568
|
-
return _async_to_generator(function() {
|
|
569
|
-
var tries, _instance_lastFrame, lastFrame;
|
|
570
|
-
return _ts_generator(this, function(_state) {
|
|
571
|
-
switch(_state.label){
|
|
572
|
-
case 0:
|
|
573
|
-
if (!instance && !regex) {
|
|
574
|
-
return [
|
|
575
|
-
2,
|
|
576
|
-
true
|
|
577
|
-
];
|
|
578
|
-
}
|
|
579
|
-
if (!instance && regex) {
|
|
580
|
-
console.error('waitForOutput failed, instance is null');
|
|
581
|
-
return [
|
|
582
|
-
2,
|
|
583
|
-
false
|
|
584
|
-
];
|
|
585
|
-
}
|
|
586
|
-
tries = 0;
|
|
587
|
-
_state.label = 1;
|
|
588
|
-
case 1:
|
|
589
|
-
if (!(tries < maxTries)) return [
|
|
590
|
-
3,
|
|
591
|
-
3
|
|
592
|
-
];
|
|
593
|
-
lastFrame = (_instance_lastFrame = instance.lastFrame()) !== null && _instance_lastFrame !== void 0 ? _instance_lastFrame : '';
|
|
594
|
-
if (regex.test(lastFrame)) {
|
|
595
|
-
return [
|
|
596
|
-
2,
|
|
597
|
-
true
|
|
598
|
-
];
|
|
599
|
-
}
|
|
600
|
-
return [
|
|
601
|
-
4,
|
|
602
|
-
new Promise(function(resolve) {
|
|
603
|
-
return setTimeout(resolve, 10);
|
|
604
|
-
})
|
|
605
|
-
];
|
|
606
|
-
case 2:
|
|
607
|
-
_state.sent();
|
|
608
|
-
tries++;
|
|
609
|
-
return [
|
|
610
|
-
3,
|
|
611
|
-
1
|
|
612
|
-
];
|
|
613
|
-
case 3:
|
|
614
|
-
console.error('waitForOutput failed, last frame:', instance.lastFrame());
|
|
615
|
-
return [
|
|
616
|
-
2,
|
|
617
|
-
false
|
|
618
|
-
];
|
|
619
|
-
}
|
|
620
|
-
});
|
|
621
|
-
})();
|
|
622
|
-
},
|
|
623
|
-
waitForTypesFile: function(types) {
|
|
624
|
-
return _async_to_generator(function() {
|
|
625
|
-
var typesPath;
|
|
626
|
-
return _ts_generator(this, function(_state) {
|
|
627
|
-
if (projectRootDir) {
|
|
628
|
-
typesPath = path.join(projectRootDir, 'resources.d.ts');
|
|
629
|
-
return [
|
|
630
|
-
2,
|
|
631
|
-
waitForTypesFile(typesPath, types, 1000)
|
|
632
|
-
];
|
|
633
|
-
}
|
|
634
|
-
console.warn("waitForTypesFile didn't wait for anything, projectRootDir is not set");
|
|
635
|
-
return [
|
|
636
|
-
2,
|
|
637
|
-
''
|
|
638
|
-
];
|
|
639
|
-
});
|
|
640
|
-
})();
|
|
641
|
-
},
|
|
642
|
-
instance: instance ? {
|
|
643
|
-
lastFrame: instance.lastFrame,
|
|
644
|
-
rerender: instance.rerender,
|
|
645
|
-
unmount: instance.unmount,
|
|
646
|
-
frames: instance.frames,
|
|
647
|
-
stdin: instance.stdin,
|
|
648
|
-
stdout: instance.stdout,
|
|
649
|
-
stderr: instance.stderr
|
|
650
|
-
} : {
|
|
651
|
-
lastFrame: function() {
|
|
652
|
-
return undefined;
|
|
653
|
-
},
|
|
654
|
-
rerender: function() {},
|
|
655
|
-
unmount: function() {},
|
|
656
|
-
frames: [],
|
|
657
|
-
stdin: {
|
|
658
|
-
write: function() {}
|
|
659
|
-
},
|
|
660
|
-
stdout: {
|
|
661
|
-
lastFrame: function() {
|
|
662
|
-
return undefined;
|
|
663
|
-
},
|
|
664
|
-
frames: []
|
|
665
|
-
},
|
|
666
|
-
stderr: {
|
|
667
|
-
lastFrame: function() {
|
|
668
|
-
return undefined;
|
|
669
|
-
},
|
|
670
|
-
frames: []
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
];
|
|
675
|
-
}
|
|
676
|
-
});
|
|
677
|
-
}).apply(this, arguments);
|
|
678
|
-
}
|
|
679
|
-
// Helper function to test CLI commands with ink-testing-library
|
|
680
|
-
function runCli(_0) {
|
|
681
|
-
return _async_to_generator(function(argv) {
|
|
682
|
-
var options, capturedElement, configDir, server, mockRenderFn, testCli;
|
|
683
|
-
var _arguments = arguments;
|
|
684
|
-
return _ts_generator(this, function(_state) {
|
|
685
|
-
switch(_state.label){
|
|
686
|
-
case 0:
|
|
687
|
-
options = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
688
|
-
capturedElement = null;
|
|
689
|
-
configDir = options.configDir, server = options.server;
|
|
690
|
-
mockRenderFn = function(element) {
|
|
691
|
-
capturedElement = render(element);
|
|
692
|
-
return capturedElement;
|
|
693
|
-
};
|
|
694
|
-
// Setup project-specific environment if configDir is provided
|
|
695
|
-
if (configDir) {
|
|
696
|
-
process.env.POSITRONIC_CONFIG_DIR = configDir;
|
|
697
|
-
}
|
|
698
|
-
_state.label = 1;
|
|
699
|
-
case 1:
|
|
700
|
-
_state.trys.push([
|
|
701
|
-
1,
|
|
702
|
-
,
|
|
703
|
-
3,
|
|
704
|
-
4
|
|
705
|
-
]);
|
|
706
|
-
testCli = buildCli({
|
|
707
|
-
argv: argv,
|
|
708
|
-
server: server,
|
|
709
|
-
exitProcess: false,
|
|
710
|
-
render: mockRenderFn
|
|
711
|
-
});
|
|
712
|
-
return [
|
|
713
|
-
4,
|
|
714
|
-
testCli.parse()
|
|
715
|
-
];
|
|
716
|
-
case 2:
|
|
717
|
-
_state.sent();
|
|
718
|
-
return [
|
|
719
|
-
2,
|
|
720
|
-
capturedElement
|
|
721
|
-
];
|
|
722
|
-
case 3:
|
|
723
|
-
// Cleanup project-specific environment if configDir was provided
|
|
724
|
-
if (configDir) {
|
|
725
|
-
delete process.env.POSITRONIC_CONFIG_DIR;
|
|
726
|
-
}
|
|
727
|
-
return [
|
|
728
|
-
7
|
|
729
|
-
];
|
|
730
|
-
case 4:
|
|
731
|
-
return [
|
|
732
|
-
2
|
|
733
|
-
];
|
|
734
|
-
}
|
|
735
|
-
});
|
|
736
|
-
}).apply(this, arguments);
|
|
737
|
-
}
|