intellitester 0.2.22 → 0.2.25
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/chunk-BDSLT5FJ.js +512 -0
- package/dist/chunk-BDSLT5FJ.js.map +1 -0
- package/dist/chunk-OLQKQ3TR.cjs +538 -0
- package/dist/chunk-OLQKQ3TR.cjs.map +1 -0
- package/dist/{chunk-GCF2Q77Q.cjs → chunk-SZFPANKM.cjs} +325 -545
- package/dist/chunk-SZFPANKM.cjs.map +1 -0
- package/dist/{chunk-EQJZ2E5H.js → chunk-YKAAZZCH.js} +324 -523
- package/dist/chunk-YKAAZZCH.js.map +1 -0
- package/dist/cli/index.cjs +37 -36
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +3 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +67 -66
- package/dist/index.d.cts +1084 -214
- package/dist/index.d.ts +1084 -214
- package/dist/index.js +2 -1
- package/dist/loader-DIGNOK6I.js +3 -0
- package/dist/loader-DIGNOK6I.js.map +1 -0
- package/dist/loader-JBFPNQO3.cjs +60 -0
- package/dist/loader-JBFPNQO3.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-EQJZ2E5H.js.map +0 -1
- package/dist/chunk-GCF2Q77Q.cjs.map +0 -1
package/dist/cli/index.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkSZFPANKM_cjs = require('../chunk-SZFPANKM.cjs');
|
|
5
|
+
var chunkOLQKQ3TR_cjs = require('../chunk-OLQKQ3TR.cjs');
|
|
5
6
|
var chunkARJYJVRM_cjs = require('../chunk-ARJYJVRM.cjs');
|
|
6
7
|
require('../chunk-QMYM2TCH.cjs');
|
|
7
8
|
require('../chunk-PAKODOH4.cjs');
|
|
@@ -158,7 +159,7 @@ ${"=".repeat(60)}`);
|
|
|
158
159
|
}
|
|
159
160
|
let trackingServer = null;
|
|
160
161
|
try {
|
|
161
|
-
trackingServer = await
|
|
162
|
+
trackingServer = await chunkSZFPANKM_cjs.startTrackingServer({ port: 0 });
|
|
162
163
|
console.log(`Tracking server started on port ${trackingServer.port}`);
|
|
163
164
|
} catch (error) {
|
|
164
165
|
console.warn("Failed to start tracking server:", error);
|
|
@@ -170,7 +171,7 @@ ${"=".repeat(60)}`);
|
|
|
170
171
|
let serverProcess = null;
|
|
171
172
|
if (pipeline.config?.webServer) {
|
|
172
173
|
try {
|
|
173
|
-
serverProcess = await
|
|
174
|
+
serverProcess = await chunkSZFPANKM_cjs.startWebServer({
|
|
174
175
|
...pipeline.config.webServer,
|
|
175
176
|
cwd: pipelineDir
|
|
176
177
|
});
|
|
@@ -182,7 +183,7 @@ ${"=".repeat(60)}`);
|
|
|
182
183
|
}
|
|
183
184
|
const signalCleanup = async () => {
|
|
184
185
|
console.log("\n\nInterrupted - cleaning up...");
|
|
185
|
-
|
|
186
|
+
chunkSZFPANKM_cjs.killServer(serverProcess);
|
|
186
187
|
if (trackingServer) await trackingServer.stop();
|
|
187
188
|
process.exit(1);
|
|
188
189
|
};
|
|
@@ -190,7 +191,7 @@ ${"=".repeat(60)}`);
|
|
|
190
191
|
process.on("SIGTERM", signalCleanup);
|
|
191
192
|
const browserName = options.browser ?? pipeline.config?.web?.browser ?? "chromium";
|
|
192
193
|
const headless = options.headed === true ? false : pipeline.config?.web?.headless ?? true;
|
|
193
|
-
const browser = await getBrowser(browserName).launch(
|
|
194
|
+
const browser = await getBrowser(browserName).launch(chunkSZFPANKM_cjs.getBrowserLaunchOptions({ headless, browser: browserName }));
|
|
194
195
|
const browserContext = await browser.newContext();
|
|
195
196
|
const page = await browserContext.newPage();
|
|
196
197
|
page.setDefaultTimeout(3e4);
|
|
@@ -198,7 +199,7 @@ ${"=".repeat(60)}`);
|
|
|
198
199
|
variables: /* @__PURE__ */ new Map(),
|
|
199
200
|
lastEmail: null,
|
|
200
201
|
emailClient: null,
|
|
201
|
-
appwriteContext:
|
|
202
|
+
appwriteContext: chunkSZFPANKM_cjs.createTestContext(),
|
|
202
203
|
appwriteConfig: pipeline.config?.appwrite ? {
|
|
203
204
|
endpoint: pipeline.config.appwrite.endpoint,
|
|
204
205
|
projectId: pipeline.config.appwrite.projectId,
|
|
@@ -206,7 +207,7 @@ ${"=".repeat(60)}`);
|
|
|
206
207
|
} : void 0
|
|
207
208
|
};
|
|
208
209
|
if (pipeline.config?.appwrite) {
|
|
209
|
-
|
|
210
|
+
chunkSZFPANKM_cjs.setupAppwriteTracking(page, executionContext);
|
|
210
211
|
}
|
|
211
212
|
const completedIds = /* @__PURE__ */ new Set();
|
|
212
213
|
const failedIds = /* @__PURE__ */ new Set();
|
|
@@ -273,10 +274,10 @@ ${"=".repeat(40)}`);
|
|
|
273
274
|
console.log(`File: ${workflowRef.file}`);
|
|
274
275
|
console.log(`${"=".repeat(40)}`);
|
|
275
276
|
try {
|
|
276
|
-
const workflowDefinition = await
|
|
277
|
+
const workflowDefinition = await chunkOLQKQ3TR_cjs.loadWorkflowDefinition(workflowFilePath);
|
|
277
278
|
if (workflowRef.variables) {
|
|
278
279
|
for (const [key, value] of Object.entries(workflowRef.variables)) {
|
|
279
|
-
const interpolated =
|
|
280
|
+
const interpolated = chunkSZFPANKM_cjs.interpolateVariables(value, executionContext.variables);
|
|
280
281
|
executionContext.variables.set(key, interpolated);
|
|
281
282
|
}
|
|
282
283
|
}
|
|
@@ -289,7 +290,7 @@ ${"=".repeat(40)}`);
|
|
|
289
290
|
sessionId,
|
|
290
291
|
testStartTime
|
|
291
292
|
};
|
|
292
|
-
const result = await
|
|
293
|
+
const result = await chunkSZFPANKM_cjs.runWorkflowWithContext(
|
|
293
294
|
workflowDefinition,
|
|
294
295
|
workflowFilePath,
|
|
295
296
|
workflowOptions
|
|
@@ -426,7 +427,7 @@ ${"=".repeat(60)}`);
|
|
|
426
427
|
process.off("SIGTERM", signalCleanup);
|
|
427
428
|
await browserContext.close();
|
|
428
429
|
await browser.close();
|
|
429
|
-
|
|
430
|
+
chunkSZFPANKM_cjs.killServer(serverProcess);
|
|
430
431
|
if (trackingServer) {
|
|
431
432
|
await trackingServer.stop();
|
|
432
433
|
}
|
|
@@ -1091,7 +1092,7 @@ function cleanYamlResponse(response) {
|
|
|
1091
1092
|
return cleaned;
|
|
1092
1093
|
}
|
|
1093
1094
|
async function generateTest(naturalLanguage, options) {
|
|
1094
|
-
const provider =
|
|
1095
|
+
const provider = chunkSZFPANKM_cjs.createAIProvider(options.aiConfig);
|
|
1095
1096
|
let systemPrompt = SYSTEM_PROMPT;
|
|
1096
1097
|
if (options.source !== null) {
|
|
1097
1098
|
const sourceConfig = options.source ?? {};
|
|
@@ -1123,7 +1124,7 @@ Please fix the issue and generate valid YAML.`;
|
|
|
1123
1124
|
const yaml$1 = cleanYamlResponse(response);
|
|
1124
1125
|
lastYaml = yaml$1;
|
|
1125
1126
|
const parsed = yaml.parse(yaml$1);
|
|
1126
|
-
const validated =
|
|
1127
|
+
const validated = chunkOLQKQ3TR_cjs.TestDefinitionSchema.parse(parsed);
|
|
1127
1128
|
return {
|
|
1128
1129
|
success: true,
|
|
1129
1130
|
test: validated,
|
|
@@ -1501,7 +1502,7 @@ var validateCommand = async (target) => {
|
|
|
1501
1502
|
throw new Error(`No YAML files found at ${absoluteTarget}`);
|
|
1502
1503
|
}
|
|
1503
1504
|
for (const file of files) {
|
|
1504
|
-
await
|
|
1505
|
+
await chunkOLQKQ3TR_cjs.loadTestDefinition(file);
|
|
1505
1506
|
console.log(`\u2713 ${path4__namespace.default.relative(process2__default.default.cwd(), file)} valid`);
|
|
1506
1507
|
}
|
|
1507
1508
|
};
|
|
@@ -1518,8 +1519,8 @@ var runTestCommand = async (target, options) => {
|
|
|
1518
1519
|
const configContent = await fs3__default.default.readFile(CONFIG_FILENAME, "utf8");
|
|
1519
1520
|
parsedConfig = parse2(configContent);
|
|
1520
1521
|
}
|
|
1521
|
-
const configMissing = parsedConfig ?
|
|
1522
|
-
const testMissing =
|
|
1522
|
+
const configMissing = parsedConfig ? chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedConfig) : [];
|
|
1523
|
+
const testMissing = chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedTest);
|
|
1523
1524
|
const allMissing = [.../* @__PURE__ */ new Set([...configMissing, ...testMissing])];
|
|
1524
1525
|
if (allMissing.length > 0) {
|
|
1525
1526
|
const projectRoot = await findProjectRoot(absoluteTarget);
|
|
@@ -1528,8 +1529,8 @@ var runTestCommand = async (target, options) => {
|
|
|
1528
1529
|
process2__default.default.exit(1);
|
|
1529
1530
|
}
|
|
1530
1531
|
}
|
|
1531
|
-
const test = await
|
|
1532
|
-
const config = hasConfigFile ? await
|
|
1532
|
+
const test = await chunkOLQKQ3TR_cjs.loadTestDefinition(absoluteTarget);
|
|
1533
|
+
const config = hasConfigFile ? await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME) : void 0;
|
|
1533
1534
|
const baseUrl = resolveBaseUrl(test, config?.platforms?.web?.baseUrl);
|
|
1534
1535
|
const headed = options.headed ?? false;
|
|
1535
1536
|
const browser = options.browser ?? "chromium";
|
|
@@ -1543,7 +1544,7 @@ var runTestCommand = async (target, options) => {
|
|
|
1543
1544
|
console.log(
|
|
1544
1545
|
`Running ${path4__namespace.default.basename(absoluteTarget)} on web (${browser}${modeFlags.length > 0 ? ", " + modeFlags.join(", ") : ""})`
|
|
1545
1546
|
);
|
|
1546
|
-
const result = await
|
|
1547
|
+
const result = await chunkSZFPANKM_cjs.runWebTest(test, {
|
|
1547
1548
|
baseUrl,
|
|
1548
1549
|
headed,
|
|
1549
1550
|
browser,
|
|
@@ -1575,7 +1576,7 @@ var generateCommand = async (prompt, options) => {
|
|
|
1575
1576
|
const { parse: parse2 } = await import('yaml');
|
|
1576
1577
|
const configContent = await fs3__default.default.readFile(CONFIG_FILENAME, "utf8");
|
|
1577
1578
|
const parsedConfig = parse2(configContent);
|
|
1578
|
-
const configMissing =
|
|
1579
|
+
const configMissing = chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedConfig);
|
|
1579
1580
|
if (configMissing.length > 0) {
|
|
1580
1581
|
const projectRoot = await findProjectRoot(CONFIG_FILENAME);
|
|
1581
1582
|
const canContinue = await validateEnvVars(configMissing, projectRoot || process2__default.default.cwd());
|
|
@@ -1583,7 +1584,7 @@ var generateCommand = async (prompt, options) => {
|
|
|
1583
1584
|
process2__default.default.exit(1);
|
|
1584
1585
|
}
|
|
1585
1586
|
}
|
|
1586
|
-
const config = await
|
|
1587
|
+
const config = await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME);
|
|
1587
1588
|
if (!config.ai) {
|
|
1588
1589
|
throw new Error('AI configuration missing in intellitester.config.yaml. Add "ai:" section with provider, model, and apiKey.');
|
|
1589
1590
|
}
|
|
@@ -1628,8 +1629,8 @@ var runWorkflowCommand = async (file, options) => {
|
|
|
1628
1629
|
const configContent = await fs3__default.default.readFile(CONFIG_FILENAME, "utf8");
|
|
1629
1630
|
parsedConfig = parse2(configContent);
|
|
1630
1631
|
}
|
|
1631
|
-
const configMissing = parsedConfig ?
|
|
1632
|
-
const workflowMissing =
|
|
1632
|
+
const configMissing = parsedConfig ? chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedConfig) : [];
|
|
1633
|
+
const workflowMissing = chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedWorkflow);
|
|
1633
1634
|
const allMissing = [.../* @__PURE__ */ new Set([...configMissing, ...workflowMissing])];
|
|
1634
1635
|
if (allMissing.length > 0) {
|
|
1635
1636
|
const projectRoot = await findProjectRoot(workflowPath);
|
|
@@ -1638,9 +1639,9 @@ var runWorkflowCommand = async (file, options) => {
|
|
|
1638
1639
|
process2__default.default.exit(1);
|
|
1639
1640
|
}
|
|
1640
1641
|
}
|
|
1641
|
-
const workflow = await
|
|
1642
|
-
const config = hasConfigFile ? await
|
|
1643
|
-
const result = await
|
|
1642
|
+
const workflow = await chunkOLQKQ3TR_cjs.loadWorkflowDefinition(workflowPath);
|
|
1643
|
+
const config = hasConfigFile ? await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME) : void 0;
|
|
1644
|
+
const result = await chunkSZFPANKM_cjs.runWorkflow(workflow, workflowPath, {
|
|
1644
1645
|
headed: options.visible,
|
|
1645
1646
|
browser: options.browser,
|
|
1646
1647
|
interactive: options.interactive,
|
|
@@ -1686,8 +1687,8 @@ var runPipelineCommand = async (file, options) => {
|
|
|
1686
1687
|
const configContent = await fs3__default.default.readFile(CONFIG_FILENAME, "utf8");
|
|
1687
1688
|
parsedConfig = parse2(configContent);
|
|
1688
1689
|
}
|
|
1689
|
-
const configMissing = parsedConfig ?
|
|
1690
|
-
const pipelineMissing =
|
|
1690
|
+
const configMissing = parsedConfig ? chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedConfig) : [];
|
|
1691
|
+
const pipelineMissing = chunkOLQKQ3TR_cjs.collectMissingEnvVars(parsedPipeline);
|
|
1691
1692
|
const allMissing = [.../* @__PURE__ */ new Set([...configMissing, ...pipelineMissing])];
|
|
1692
1693
|
if (allMissing.length > 0) {
|
|
1693
1694
|
const projectRoot = await findProjectRoot(pipelinePath);
|
|
@@ -1696,8 +1697,8 @@ var runPipelineCommand = async (file, options) => {
|
|
|
1696
1697
|
process2__default.default.exit(1);
|
|
1697
1698
|
}
|
|
1698
1699
|
}
|
|
1699
|
-
const pipeline = await
|
|
1700
|
-
hasConfigFile ? await
|
|
1700
|
+
const pipeline = await chunkOLQKQ3TR_cjs.loadPipelineDefinition(pipelinePath);
|
|
1701
|
+
hasConfigFile ? await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME) : void 0;
|
|
1701
1702
|
const result = await runPipeline(pipeline, pipelinePath, {
|
|
1702
1703
|
headed: options.visible,
|
|
1703
1704
|
browser: options.browser,
|
|
@@ -1752,7 +1753,7 @@ var main = async () => {
|
|
|
1752
1753
|
const browser = resolveBrowserName(options.browser || "chrome");
|
|
1753
1754
|
if (options.preview) {
|
|
1754
1755
|
const hasConfigFile = await fileExists(CONFIG_FILENAME);
|
|
1755
|
-
const config = hasConfigFile ? await
|
|
1756
|
+
const config = hasConfigFile ? await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME) : void 0;
|
|
1756
1757
|
const { cleanup } = await buildAndPreview(config, process2__default.default.cwd());
|
|
1757
1758
|
previewCleanup = cleanup;
|
|
1758
1759
|
}
|
|
@@ -1825,21 +1826,21 @@ var main = async () => {
|
|
|
1825
1826
|
}
|
|
1826
1827
|
return;
|
|
1827
1828
|
}
|
|
1828
|
-
if (
|
|
1829
|
+
if (chunkOLQKQ3TR_cjs.isPipelineFile(file)) {
|
|
1829
1830
|
await runPipelineCommand(file, runOpts);
|
|
1830
1831
|
return;
|
|
1831
1832
|
}
|
|
1832
|
-
if (
|
|
1833
|
+
if (chunkOLQKQ3TR_cjs.isWorkflowFile(file)) {
|
|
1833
1834
|
await runWorkflowCommand(file, runOpts);
|
|
1834
1835
|
return;
|
|
1835
1836
|
}
|
|
1836
1837
|
const fileContent = await fs3__default.default.readFile(path4__namespace.default.resolve(file), "utf8");
|
|
1837
|
-
if (
|
|
1838
|
+
if (chunkOLQKQ3TR_cjs.isPipelineContent(fileContent)) {
|
|
1838
1839
|
console.log(`Note: Detected as pipeline by content structure`);
|
|
1839
1840
|
await runPipelineCommand(file, runOpts);
|
|
1840
1841
|
return;
|
|
1841
1842
|
}
|
|
1842
|
-
if (
|
|
1843
|
+
if (chunkOLQKQ3TR_cjs.isWorkflowContent(fileContent)) {
|
|
1843
1844
|
console.log(`Note: Detected as workflow by content structure`);
|
|
1844
1845
|
await runWorkflowCommand(file, runOpts);
|
|
1845
1846
|
return;
|
|
@@ -1920,7 +1921,7 @@ Found ${failedCleanups.length} failed cleanup(s):
|
|
|
1920
1921
|
if (!hasConfigFile) {
|
|
1921
1922
|
throw new Error(`No ${CONFIG_FILENAME} found. Cannot retry cleanup without provider configuration.`);
|
|
1922
1923
|
}
|
|
1923
|
-
const config = await
|
|
1924
|
+
const config = await chunkOLQKQ3TR_cjs.loadIntellitesterConfig(CONFIG_FILENAME);
|
|
1924
1925
|
const failedCleanups = await chunkARJYJVRM_cjs.loadFailedCleanups(process2__default.default.cwd());
|
|
1925
1926
|
if (failedCleanups.length === 0) {
|
|
1926
1927
|
console.log("No failed cleanups to retry.");
|