@ekairos/testing 1.21.90-beta.0

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/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # @ekairos/testing
2
+
3
+ Testing toolkit for domain-first Ekairos apps.
4
+
5
+ Goal: keep production runtime contract (`resolveRuntime(domain, env)`) and inject testing concerns only in test execution.
6
+
7
+ ## Core model
8
+
9
+ - Production requires explicit domain at runtime.
10
+ - Tests compose `appDomain + testDomain`.
11
+ - Runtime resolution in tests uses the same resolver contract.
12
+ - Test schema is never pushed to production apps.
13
+
14
+ ## Explicit test schema composition
15
+
16
+ Create `tests/instant.schema.ts` in each app:
17
+
18
+ ```ts
19
+ import { domain } from "@ekairos/domain";
20
+ import { ekairosTestDomain } from "@ekairos/testing/schema";
21
+ import appDomain from "@/lib/domain";
22
+
23
+ export const appTestingDomain = domain("my-app.testing")
24
+ .includes(appDomain)
25
+ .includes(ekairosTestDomain)
26
+ .schema({ entities: {}, links: {}, rooms: {} });
27
+
28
+ export default appTestingDomain.toInstantSchema();
29
+ ```
30
+
31
+ This keeps testing explicit: import real app domain, re-compose for test.
32
+
33
+ Think of tests as a separate runtime bootstrap:
34
+
35
+ - do not depend on app `src/runtime.ts`,
36
+ - define test schema in `tests/instant.schema.ts`,
37
+ - resolve runtime with explicit `domain` per test run.
38
+
39
+ ## Runtime APIs
40
+
41
+ ### `getEkairosRuntime(...)`
42
+
43
+ Resolve runtime with explicit domain and explicit resolver.
44
+
45
+ ```ts
46
+ import { getEkairosRuntime } from "@ekairos/testing/runtime";
47
+
48
+ const rt = await getEkairosRuntime({
49
+ env: { orgId: "org_test_1" },
50
+ domain: appDomain,
51
+ resolveRuntime: ({ env, domain }) => getAppRuntime({ env, domain }),
52
+ });
53
+ ```
54
+
55
+ ### `getEkairosTestRuntime(...)`
56
+
57
+ Compose `appDomain + testDomain` and resolve runtime in one call.
58
+
59
+ ```ts
60
+ import { getEkairosTestRuntime } from "@ekairos/testing/runtime";
61
+
62
+ const { runtime, domain } = await getEkairosTestRuntime({
63
+ env: { orgId: "org_test_1" },
64
+ appDomain,
65
+ resolveRuntime: ({ env, domain }) => getAppRuntime({ env, domain }),
66
+ });
67
+ ```
68
+
69
+ ### `configureTestRuntime(...)`
70
+
71
+ Install a global test runtime resolver for suites that call `resolveRuntime(domain, env)` directly.
72
+
73
+ ```ts
74
+ import { configureTestRuntime } from "@ekairos/testing/runtime";
75
+
76
+ beforeAll(() => {
77
+ configureTestRuntime({
78
+ resolveRuntime: ({ env, domain }) => getAppRuntime({ env, domain }),
79
+ });
80
+ });
81
+ ```
82
+
83
+ Behavior:
84
+
85
+ - injects `ekairosTestDomain` by default,
86
+ - can be customized with `testDomain`, `composeDomain`, `shouldInject`,
87
+ - keeps domain explicit per call.
88
+
89
+ ## Provision APIs
90
+
91
+ `@ekairos/testing/provision`:
92
+
93
+ - `createTestApp({ name, token, schema?, perms?, orgId? })`
94
+ - `pushTestSchema({ appId, token, schema })`
95
+ - `pushTestPerms({ appId, token, perms })`
96
+ - `destroyTestApp({ appId, token })`
97
+
98
+ Uses Instant Platform API directly.
99
+
100
+ Typical flow:
101
+
102
+ 1. `createTestApp(...)` for an ephemeral app.
103
+ 2. `pushTestSchema(...)` with composed testing schema.
104
+ 3. run vitest/playwright against that app runtime.
105
+ 4. optional `destroyTestApp(...)`.
106
+
107
+ No Clerk wiring is required for this flow unless your tests explicitly validate Clerk behavior.
108
+
109
+ ## Test domain entities
110
+
111
+ `ekairosTestDomain` includes:
112
+
113
+ - `test_runs`
114
+ - `test_cases`
115
+ - `test_events`
116
+ - `test_artifacts`
117
+ - `test_code_refs`
118
+
119
+ These hold run evidence (timeline, images, attachments, code links) without contaminating production domain schema.
120
+
121
+ ## Reporter integration
122
+
123
+ Playwright:
124
+
125
+ ```ts
126
+ export default defineConfig({
127
+ reporter: [["list"], ["@ekairos/testing/playwright"]],
128
+ });
129
+ ```
130
+
131
+ Vitest:
132
+
133
+ ```ts
134
+ import { ekairosVitestReporter } from "@ekairos/testing/vitest";
135
+
136
+ export default defineConfig({
137
+ test: {
138
+ reporters: ["default", ekairosVitestReporter()],
139
+ },
140
+ });
141
+ ```
package/dist/core.d.ts ADDED
@@ -0,0 +1,56 @@
1
+ export type EkairosPrMeta = {
2
+ provider?: string;
3
+ id?: string;
4
+ url?: string;
5
+ };
6
+ export type EkairosRepoMeta = {
7
+ name?: string;
8
+ path?: string;
9
+ commit?: string;
10
+ branch?: string;
11
+ };
12
+ export type EkairosRunOptions = {
13
+ outputDir?: string;
14
+ runId?: string;
15
+ taskId?: string;
16
+ pr?: EkairosPrMeta;
17
+ repo?: EkairosRepoMeta;
18
+ captureWorkflows?: boolean;
19
+ workflowDataDir?: string;
20
+ workflowApiBaseUrl?: string;
21
+ workflowApiKey?: string;
22
+ workflowProjectId?: string;
23
+ command?: string;
24
+ project?: string;
25
+ };
26
+ export type EkairosRunSummary = {
27
+ total: number;
28
+ passed: number;
29
+ failed: number;
30
+ skipped: number;
31
+ };
32
+ export type EkairosRunContext = {
33
+ runId: string;
34
+ runDir: string;
35
+ outputDir: string;
36
+ startedAt: string;
37
+ summary: EkairosRunSummary;
38
+ writeResult: (record: Record<string, unknown>) => void;
39
+ writeLog: (record: Record<string, unknown>) => void;
40
+ addArtifact: (record: Record<string, unknown>) => void;
41
+ finalize: (status: "passed" | "failed") => void;
42
+ };
43
+ export declare function initRunContext(runner: "playwright" | "vitest", options?: EkairosRunOptions): EkairosRunContext;
44
+ export declare function resolveRunDir(outputDir?: string, runId?: string): {
45
+ runDir: string;
46
+ runId: string;
47
+ outputDir: string;
48
+ };
49
+ export declare function loadRunIndex(filePath: string): Record<string, unknown>;
50
+ export declare function writeRunIndex(filePath: string, data: Record<string, unknown>): void;
51
+ export declare function copyArtifact(sourcePath: string, destDir: string, fileName?: string): {
52
+ destPath: string;
53
+ size: number;
54
+ };
55
+ export declare function safeFileName(input: string): string;
56
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;CACjD,CAAC;AAoGF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,GAAG,QAAQ,EAC/B,OAAO,GAAE,iBAAsB,GAC9B,iBAAiB,CAsFnB;AAED,wBAAgB,aAAa,CAC3B,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAKtD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAE5E;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOpC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD"}
package/dist/core.js ADDED
@@ -0,0 +1,194 @@
1
+ import crypto from "node:crypto";
2
+ import { execSync } from "node:child_process";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ const DEFAULT_OUTPUT_DIR = ".ekairos/test-runs";
6
+ const LATEST_RUN_FILE = "latest";
7
+ function nowIso() {
8
+ return new Date().toISOString();
9
+ }
10
+ function safeExec(cmd, cwd) {
11
+ try {
12
+ const out = execSync(cmd, { cwd, stdio: ["ignore", "pipe", "ignore"] })
13
+ .toString()
14
+ .trim();
15
+ return out || undefined;
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ function resolveRepoMeta(cwd, input) {
22
+ const gitRoot = safeExec("git rev-parse --show-toplevel", cwd);
23
+ const repoPath = input?.path || gitRoot || cwd;
24
+ const name = input?.name || (repoPath ? path.basename(repoPath) : undefined);
25
+ const commit = input?.commit || safeExec("git rev-parse HEAD", repoPath);
26
+ const branch = input?.branch || safeExec("git rev-parse --abbrev-ref HEAD", repoPath);
27
+ return { name, path: repoPath, commit, branch };
28
+ }
29
+ function resolvePrMeta(input) {
30
+ const env = process.env;
31
+ return {
32
+ provider: input?.provider || env.EKAIROS_PR_PROVIDER || env.PR_PROVIDER,
33
+ id: input?.id || env.EKAIROS_PR_ID || env.PR_ID,
34
+ url: input?.url || env.EKAIROS_PR_URL || env.PR_URL,
35
+ };
36
+ }
37
+ function resolveTaskId(input) {
38
+ return input || process.env.EKAIROS_TASK_ID;
39
+ }
40
+ function readLatestRunId(outputDir) {
41
+ try {
42
+ const latestPath = path.resolve(process.cwd(), outputDir, LATEST_RUN_FILE);
43
+ const raw = fs.readFileSync(latestPath, "utf-8").trim();
44
+ return raw || undefined;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ function writeLatestRunId(outputDir, runId) {
51
+ try {
52
+ const latestPath = path.resolve(process.cwd(), outputDir, LATEST_RUN_FILE);
53
+ fs.writeFileSync(latestPath, `${runId}\n`);
54
+ }
55
+ catch {
56
+ // Best-effort only; ignore failures.
57
+ }
58
+ }
59
+ function resolveRunId(input, outputDir, preferLatest = false) {
60
+ if (input)
61
+ return input;
62
+ const envRunId = process.env.EKAIROS_TEST_RUN_ID || process.env.EKAIROS_RUN_ID;
63
+ if (envRunId)
64
+ return envRunId;
65
+ if (preferLatest) {
66
+ const latest = readLatestRunId(outputDir || resolveOutputDir(undefined));
67
+ if (latest)
68
+ return latest;
69
+ }
70
+ const now = new Date();
71
+ const stamp = now.toISOString().replace(/[:.]/g, "-").replace("T", "_").replace("Z", "");
72
+ const rand = crypto.randomBytes(3).toString("hex");
73
+ return `run_${stamp}_${rand}`;
74
+ }
75
+ function resolveOutputDir(input) {
76
+ return input || process.env.EKAIROS_TEST_OUTPUT || DEFAULT_OUTPUT_DIR;
77
+ }
78
+ function ensureDir(dir) {
79
+ fs.mkdirSync(dir, { recursive: true });
80
+ }
81
+ function writeJson(filePath, data) {
82
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
83
+ }
84
+ function appendJsonl(filePath, data) {
85
+ fs.appendFileSync(filePath, `${JSON.stringify(data)}\n`);
86
+ }
87
+ function readJson(filePath, fallback) {
88
+ try {
89
+ const raw = fs.readFileSync(filePath, "utf-8");
90
+ return JSON.parse(raw);
91
+ }
92
+ catch {
93
+ return fallback;
94
+ }
95
+ }
96
+ export function initRunContext(runner, options = {}) {
97
+ const outputDir = resolveOutputDir(options.outputDir);
98
+ const runId = resolveRunId(options.runId, outputDir, false);
99
+ const runDir = path.resolve(process.cwd(), outputDir, runId);
100
+ const startedAt = nowIso();
101
+ ensureDir(runDir);
102
+ ensureDir(path.join(runDir, "artifacts"));
103
+ ensureDir(path.join(runDir, "context"));
104
+ ensureDir(path.join(runDir, "workflows"));
105
+ ensureDir(path.join(runDir, "workflows", "events"));
106
+ const repo = resolveRepoMeta(process.cwd(), options.repo);
107
+ const pr = resolvePrMeta(options.pr);
108
+ const prData = pr.provider || pr.id || pr.url ? pr : undefined;
109
+ const taskId = resolveTaskId(options.taskId);
110
+ const summary = { total: 0, passed: 0, failed: 0, skipped: 0 };
111
+ const runRecord = {
112
+ schemaVersion: "1.0",
113
+ runId,
114
+ runner,
115
+ repo,
116
+ pr: prData,
117
+ task: taskId ? { id: taskId } : undefined,
118
+ startedAt,
119
+ finishedAt: null,
120
+ status: "running",
121
+ summary,
122
+ environment: {
123
+ node: process.version,
124
+ os: process.platform,
125
+ ci: Boolean(process.env.CI),
126
+ },
127
+ config: {
128
+ command: options.command,
129
+ project: options.project,
130
+ },
131
+ };
132
+ writeJson(path.join(runDir, "run.json"), runRecord);
133
+ process.env.EKAIROS_TEST_RUN_ID = runId;
134
+ process.env.EKAIROS_TEST_RUN_DIR = runDir;
135
+ process.env.EKAIROS_TEST_OUTPUT = outputDir;
136
+ writeLatestRunId(outputDir, runId);
137
+ const artifactsIndexPath = path.join(runDir, "artifacts", "index.json");
138
+ const artifactsIndex = readJson(artifactsIndexPath, { schemaVersion: "1.0", artifacts: [] });
139
+ const context = {
140
+ runId,
141
+ runDir,
142
+ outputDir,
143
+ startedAt,
144
+ summary,
145
+ writeResult(record) {
146
+ appendJsonl(path.join(runDir, "results.jsonl"), record);
147
+ },
148
+ writeLog(record) {
149
+ appendJsonl(path.join(runDir, "logs.jsonl"), record);
150
+ },
151
+ addArtifact(record) {
152
+ artifactsIndex.artifacts.push(record);
153
+ writeJson(artifactsIndexPath, artifactsIndex);
154
+ },
155
+ finalize(status) {
156
+ const finishedAt = nowIso();
157
+ if (summary.total === 0) {
158
+ summary.total = summary.passed + summary.failed + summary.skipped;
159
+ }
160
+ const finalRecord = {
161
+ ...runRecord,
162
+ finishedAt,
163
+ status,
164
+ summary,
165
+ };
166
+ writeJson(path.join(runDir, "run.json"), finalRecord);
167
+ },
168
+ };
169
+ return context;
170
+ }
171
+ export function resolveRunDir(outputDir, runId) {
172
+ const finalOutput = resolveOutputDir(outputDir);
173
+ const finalRunId = resolveRunId(runId, finalOutput, true);
174
+ const runDir = path.resolve(process.cwd(), finalOutput, finalRunId);
175
+ return { runDir, runId: finalRunId, outputDir: finalOutput };
176
+ }
177
+ export function loadRunIndex(filePath) {
178
+ return readJson(filePath, {});
179
+ }
180
+ export function writeRunIndex(filePath, data) {
181
+ writeJson(filePath, data);
182
+ }
183
+ export function copyArtifact(sourcePath, destDir, fileName) {
184
+ ensureDir(destDir);
185
+ const baseName = fileName || path.basename(sourcePath);
186
+ const destPath = path.join(destDir, baseName);
187
+ fs.copyFileSync(sourcePath, destPath);
188
+ const stat = fs.statSync(destPath);
189
+ return { destPath, size: stat.size };
190
+ }
191
+ export function safeFileName(input) {
192
+ return input.replace(/[^a-zA-Z0-9._-]+/g, "-").slice(0, 120);
193
+ }
194
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type { EkairosRunOptions, EkairosRunContext, EkairosRunSummary, EkairosRepoMeta, EkairosPrMeta, } from "./core.js";
2
+ export { ekairosPlaywrightReporter, EkairosPlaywrightReporter } from "./playwright.js";
3
+ export { ekairosVitestReporter } from "./vitest.js";
4
+ export { recordWorkflowRun, captureStoryTrace, captureLocalWorkflowTrace, resolveWorkflowDataDir, } from "./story.js";
5
+ export { awaitHook, triggerHook, awaitWorkflowCompletion, awaitWorkflowStatus, } from "./workflow.js";
6
+ export type { AwaitHookParams, TriggerHookParams, WorkflowHookRecord, AwaitWorkflowCompletionParams, AwaitWorkflowStatusParams, } from "./workflow.js";
7
+ export { ekairosTestDomain, createAppTestingDomain, type EkairosTestDomain, } from "./schema.js";
8
+ export { getEkairosRuntime, getEkairosTestRuntime, configureTestRuntime, type ResolveEkairosRuntime, type TestRuntimeParams, type ComposeTestDomain, } from "./runtime.js";
9
+ export { createTestApp, pushTestSchema, pushTestPerms, destroyTestApp, type CreateTestAppParams, type CreateTestAppResult, type PushTestSchemaParams, type PushTestPermsParams, type DestroyTestAppParams, } from "./provision.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { ekairosPlaywrightReporter, EkairosPlaywrightReporter } from "./playwright.js";
2
+ export { ekairosVitestReporter } from "./vitest.js";
3
+ export { recordWorkflowRun, captureStoryTrace, captureLocalWorkflowTrace, resolveWorkflowDataDir, } from "./story.js";
4
+ export { awaitHook, triggerHook, awaitWorkflowCompletion, awaitWorkflowStatus, } from "./workflow.js";
5
+ export { ekairosTestDomain, createAppTestingDomain, } from "./schema.js";
6
+ export { getEkairosRuntime, getEkairosTestRuntime, configureTestRuntime, } from "./runtime.js";
7
+ export { createTestApp, pushTestSchema, pushTestPerms, destroyTestApp, } from "./provision.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AASvB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GAIrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,GAMf,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Reporter, TestCase, TestResult, Suite } from "@playwright/test/reporter";
2
+ import { EkairosRunOptions } from "./core.js";
3
+ export declare class EkairosPlaywrightReporter implements Reporter {
4
+ private options;
5
+ private ctx;
6
+ private artifactSeq;
7
+ private workflowRunIds;
8
+ constructor(options?: EkairosRunOptions);
9
+ onBegin(_suite: Suite): void;
10
+ onTestEnd(test: TestCase, result: TestResult): void;
11
+ onStdOut(chunk: string | Buffer, test?: TestCase): void;
12
+ onStdErr(chunk: string | Buffer, test?: TestCase): void;
13
+ onEnd(): Promise<void>;
14
+ private tryCaptureWorkflowIds;
15
+ private isWorkflowCaptureEnabled;
16
+ private captureWorkflowTraces;
17
+ private loadWorkflowIndex;
18
+ private discoverLocalRunIds;
19
+ }
20
+ export declare const ekairosPlaywrightReporter: typeof EkairosPlaywrightReporter;
21
+ export default EkairosPlaywrightReporter;
22
+ //# sourceMappingURL=playwright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EACL,iBAAiB,EAIlB,MAAM,WAAW,CAAC;AAenB,qBAAa,yBAA0B,YAAW,QAAQ;IACxD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAAqB;gBAE/B,OAAO,GAAE,iBAAsB;IAI3C,OAAO,CAAC,MAAM,EAAE,KAAK;IAOrB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IA2C5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;IAahD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;IAa1C,KAAK;IAMX,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,wBAAwB;YAOlB,qBAAqB;IA4DnC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,mBAAmB;CAuB5B;AAED,eAAO,MAAM,yBAAyB,kCAA4B,CAAC;AACnE,eAAe,yBAAyB,CAAC"}