@plan2net/typo3-playwright-toolkit 0.22.0 → 0.24.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 +39 -5
- package/dist/builders/content-builder.d.ts +4 -0
- package/dist/builders/content-builder.d.ts.map +1 -1
- package/dist/builders/content-builder.js +10 -1
- package/dist/builders/content-builder.js.map +1 -1
- package/dist/builders/core-content.d.ts +1 -1
- package/dist/builders/core-content.d.ts.map +1 -1
- package/dist/builders/core-content.js +1 -1
- package/dist/builders/core-content.js.map +1 -1
- package/dist/builders/page-builder.d.ts +3 -1
- package/dist/builders/page-builder.d.ts.map +1 -1
- package/dist/builders/page-builder.js +18 -14
- package/dist/builders/page-builder.js.map +1 -1
- package/dist/builders/relations.d.ts.map +1 -1
- package/dist/builders/relations.js +3 -2
- package/dist/builders/relations.js.map +1 -1
- package/dist/builders/request-context.d.ts +1 -2
- package/dist/builders/request-context.d.ts.map +1 -1
- package/dist/builders/request-context.js +3 -3
- package/dist/builders/request-context.js.map +1 -1
- package/dist/checks/csp.d.ts.map +1 -1
- package/dist/checks/csp.js +4 -1
- package/dist/checks/csp.js.map +1 -1
- package/dist/checks/screenshot.d.ts +5 -2
- package/dist/checks/screenshot.d.ts.map +1 -1
- package/dist/checks/screenshot.js +35 -40
- package/dist/checks/screenshot.js.map +1 -1
- package/dist/clean/cli.js +16 -11
- package/dist/clean/cli.js.map +1 -1
- package/dist/config.d.ts +5 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -9
- package/dist/config.js.map +1 -1
- package/dist/contract.d.ts +2 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +2 -0
- package/dist/contract.js.map +1 -1
- package/dist/doctor/reporter.d.ts.map +1 -1
- package/dist/doctor/reporter.js +2 -1
- package/dist/doctor/reporter.js.map +1 -1
- package/dist/global-setup.d.ts +4 -1
- package/dist/global-setup.d.ts.map +1 -1
- package/dist/global-setup.js +34 -8
- package/dist/global-setup.js.map +1 -1
- package/dist/global-teardown.d.ts +5 -1
- package/dist/global-teardown.d.ts.map +1 -1
- package/dist/global-teardown.js +19 -42
- package/dist/global-teardown.js.map +1 -1
- package/dist/http/cleanup-client.d.ts.map +1 -1
- package/dist/http/cleanup-client.js +2 -1
- package/dist/http/cleanup-client.js.map +1 -1
- package/dist/http/off-site-headers.d.ts +1 -1
- package/dist/http/off-site-headers.d.ts.map +1 -1
- package/dist/http/off-site-headers.js +3 -3
- package/dist/http/off-site-headers.js.map +1 -1
- package/dist/http/record-edit.d.ts +1 -0
- package/dist/http/record-edit.d.ts.map +1 -1
- package/dist/http/record-edit.js +51 -5
- package/dist/http/record-edit.js.map +1 -1
- package/dist/http/recorded-errors.d.ts.map +1 -1
- package/dist/http/recorded-errors.js +2 -1
- package/dist/http/recorded-errors.js.map +1 -1
- package/dist/http/test-api.d.ts +9 -0
- package/dist/http/test-api.d.ts.map +1 -0
- package/dist/http/test-api.js +29 -0
- package/dist/http/test-api.js.map +1 -0
- package/dist/http/toolkit-request.d.ts +2 -1
- package/dist/http/toolkit-request.d.ts.map +1 -1
- package/dist/http/toolkit-request.js +14 -4
- package/dist/http/toolkit-request.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inspect/cli.js +4 -4
- package/dist/inspect/cli.js.map +1 -1
- package/dist/inspect/links.d.ts +0 -2
- package/dist/inspect/links.d.ts.map +1 -1
- package/dist/inspect/links.js +25 -17
- package/dist/inspect/links.js.map +1 -1
- package/dist/inspect/replay-target.d.ts +3 -2
- package/dist/inspect/replay-target.d.ts.map +1 -1
- package/dist/inspect/replay-target.js +5 -12
- package/dist/inspect/replay-target.js.map +1 -1
- package/dist/inspect/token.d.ts +2 -1
- package/dist/inspect/token.d.ts.map +1 -1
- package/dist/inspect/token.js +3 -4
- package/dist/inspect/token.js.map +1 -1
- package/dist/scenario.d.ts +10 -4
- package/dist/scenario.d.ts.map +1 -1
- package/dist/scenario.js +60 -44
- package/dist/scenario.js.map +1 -1
- package/dist/setup-cache/client.d.ts.map +1 -1
- package/dist/setup-cache/client.js +2 -1
- package/dist/setup-cache/client.js.map +1 -1
- package/dist/sites/probe.d.ts +8 -0
- package/dist/sites/probe.d.ts.map +1 -0
- package/dist/sites/probe.js +50 -0
- package/dist/sites/probe.js.map +1 -0
- package/dist/sites/registry.d.ts +31 -0
- package/dist/sites/registry.d.ts.map +1 -0
- package/dist/sites/registry.js +97 -0
- package/dist/sites/registry.js.map +1 -0
- package/dist/state/attempt-registry.d.ts +5 -0
- package/dist/state/attempt-registry.d.ts.map +1 -1
- package/dist/state/attempt-registry.js +3 -0
- package/dist/state/attempt-registry.js.map +1 -1
- package/dist/state/run-namespace.d.ts.map +1 -1
- package/dist/state/run-namespace.js +3 -0
- package/dist/state/run-namespace.js.map +1 -1
- package/dist/state/testing-url.d.ts +4 -0
- package/dist/state/testing-url.d.ts.map +1 -0
- package/dist/state/testing-url.js +14 -0
- package/dist/state/testing-url.js.map +1 -0
- package/dist/types/playwright-extensions.d.ts +2 -0
- package/dist/types/playwright-extensions.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/scenario.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { test as base } from '@playwright/test';
|
|
1
|
+
import { test as base, } from '@playwright/test';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { toolkitHeaders } from './contract.js';
|
|
4
4
|
import { setupCacheUse } from './setup-cache/use.js';
|
|
@@ -6,7 +6,8 @@ import { getToolkitConfig } from './config.js';
|
|
|
6
6
|
import { ensureState, setupFixtureTimeout } from './state/ensure-state.js';
|
|
7
7
|
import { applyScenarioOutcome, recordTestFailure } from './state/scenario-outcome.js';
|
|
8
8
|
import { sanitizeScenarioKey } from './state/run-namespace.js';
|
|
9
|
-
import { DEFAULT_BACKEND_PATH,
|
|
9
|
+
import { DEFAULT_BACKEND_PATH, testApiUrl } from './http/test-api.js';
|
|
10
|
+
import { resolveRequestContext, } from './builders/request-context.js';
|
|
10
11
|
import { recordSaver } from './http/record-edit.js';
|
|
11
12
|
import { ContentBuilder, saveBatch } from './builders/content-builder.js';
|
|
12
13
|
import { PageBuilder } from './builders/page-builder.js';
|
|
@@ -14,6 +15,7 @@ import { applyToolkitHeaders } from './http/off-site-headers.js';
|
|
|
14
15
|
import { prepareScenarioContext } from './http/prepare-context.js';
|
|
15
16
|
import { toolkitRequest } from './http/toolkit-request.js';
|
|
16
17
|
import { runAccessibilityScan, shouldScanAutomatically } from './checks/accessibility.js';
|
|
18
|
+
import { readSitesFile, resolveScenarioSite, siteCacheKey } from './sites/registry.js';
|
|
17
19
|
import { reportRecordedErrors, reportSetupFailure } from './report/recorded-error-report.js';
|
|
18
20
|
/** A failed setup throws out of ensureState, so it never reaches the fixture's end. */
|
|
19
21
|
export async function resolveSetupOutcome(config, scenarioKey, testInfo, run, report = reportSetupFailure) {
|
|
@@ -44,17 +46,18 @@ export async function createScenarioFolder(page, builderContext, name) {
|
|
|
44
46
|
// Or TYPO3 derives one from the title and the scenario's own page,
|
|
45
47
|
// wanting "/news" too, has to take "/news-1".
|
|
46
48
|
.withField('slug', `/replay-${name}`)
|
|
47
|
-
.atParentId(FIXTURE_ROOT_ID)
|
|
49
|
+
.atParentId(builderContext.rootPageId ?? FIXTURE_ROOT_ID)
|
|
48
50
|
.create();
|
|
49
51
|
return { id: folder.id, ownPages: new Set() };
|
|
50
52
|
}
|
|
51
|
-
export async function buildScenarioContext(page, config, session, testId, name) {
|
|
53
|
+
export async function buildScenarioContext(page, config, session, testId, name, site) {
|
|
52
54
|
const context = {
|
|
53
55
|
testId,
|
|
54
56
|
baseUrl: config.testingURL,
|
|
55
57
|
backendPath: session.backendPath,
|
|
56
58
|
routeToken: session.routeToken,
|
|
57
59
|
usedSlugs: new Set(),
|
|
60
|
+
rootPageId: site?.rootPageId,
|
|
58
61
|
};
|
|
59
62
|
if (!config.replay) {
|
|
60
63
|
return context;
|
|
@@ -62,9 +65,9 @@ export async function buildScenarioContext(page, config, session, testId, name)
|
|
|
62
65
|
// Built from a context with no folder, or it would land inside itself.
|
|
63
66
|
return { ...context, replayFolder: await createScenarioFolder(page, context, name) };
|
|
64
67
|
}
|
|
65
|
-
export async function openAuthenticatedPage(browser, config, testId, name = '') {
|
|
68
|
+
export async function openAuthenticatedPage(browser, config, testId, name = '', site, projectOptions = {}) {
|
|
66
69
|
const headers = toolkitHeaders(config, testId);
|
|
67
|
-
const context = await browser.newContext({
|
|
70
|
+
const context = await browser.newContext({ ...projectOptions, baseURL: site?.base, serviceWorkers: 'block' });
|
|
68
71
|
// The close handle is only returned on success, so a failure closes its own context.
|
|
69
72
|
try {
|
|
70
73
|
await applyToolkitHeaders(context, config, testId);
|
|
@@ -72,7 +75,7 @@ export async function openAuthenticatedPage(browser, config, testId, name = '')
|
|
|
72
75
|
const page = await context.newPage();
|
|
73
76
|
page.testId = testId;
|
|
74
77
|
// Playwright would re-send the secret to whatever the redirect names.
|
|
75
|
-
const response = await page.request.post(
|
|
78
|
+
const response = await page.request.post(testApiUrl(config, 'session'), {
|
|
76
79
|
headers,
|
|
77
80
|
data: { name },
|
|
78
81
|
maxRedirects: 0,
|
|
@@ -129,46 +132,54 @@ export function claimScenarioFile(file, owner) {
|
|
|
129
132
|
* One test file is one scenario: the first test that needs state runs the setup,
|
|
130
133
|
* the rest wait for it or are skipped if it failed.
|
|
131
134
|
*/
|
|
132
|
-
export function defineScenario(setup) {
|
|
135
|
+
export function defineScenario(setup, options = {}) {
|
|
133
136
|
const owner = Symbol('scenario');
|
|
134
137
|
return base.extend({
|
|
135
|
-
resolvedScenario: [async ({ browser }, use, testInfo) => {
|
|
138
|
+
resolvedScenario: [async ({ browser, ignoreHTTPSErrors, httpCredentials, proxy }, use, testInfo) => {
|
|
136
139
|
claimScenarioFile(testInfo.file, owner);
|
|
137
140
|
const config = getToolkitConfig();
|
|
138
141
|
const key = sanitizeScenarioKey(testInfo.file);
|
|
139
142
|
const name = scenarioName(testInfo.file);
|
|
140
|
-
const outcome = await resolveSetupOutcome(config, key, testInfo, () =>
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
signal,
|
|
157
|
-
page: session.page,
|
|
158
|
-
request: toolkitRequest(session.page.request, config, testId),
|
|
159
|
-
builders: {
|
|
160
|
-
page: () => new PageBuilder(session.page, builderContext),
|
|
161
|
-
content: () => new ContentBuilder(session.page, builderContext),
|
|
162
|
-
batch: (...queued) => saveBatch(session.page, builderContext, queued),
|
|
163
|
-
},
|
|
164
|
-
saveRecord: recordSaver(session.page.request, resolveRequestContext(session.page, builderContext)),
|
|
143
|
+
const { outcome, site } = await resolveSetupOutcome(config, key, testInfo, async () => {
|
|
144
|
+
const site = resolveScenarioSite(config, readSitesFile(config), options.site);
|
|
145
|
+
const outcome = await ensureState(config, {
|
|
146
|
+
key,
|
|
147
|
+
name,
|
|
148
|
+
triggerId: testInfo.testId,
|
|
149
|
+
setupCache: setupCacheUse(config, suiteRootOf(testInfo), siteCacheKey(key, site)),
|
|
150
|
+
setup: async ({ testId, attempt, signal }) => {
|
|
151
|
+
if (!setup) {
|
|
152
|
+
return {};
|
|
153
|
+
}
|
|
154
|
+
const label = attempt > 1 ? `${name} #${attempt}` : name;
|
|
155
|
+
const session = await openAuthenticatedPage(browser, config, testId, label, site, {
|
|
156
|
+
ignoreHTTPSErrors,
|
|
157
|
+
httpCredentials,
|
|
158
|
+
proxy,
|
|
165
159
|
});
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
160
|
+
try {
|
|
161
|
+
const builderContext = await buildScenarioContext(session.page, config, session, testId, name, site);
|
|
162
|
+
return await setup({
|
|
163
|
+
testId,
|
|
164
|
+
attempt,
|
|
165
|
+
signal,
|
|
166
|
+
page: session.page,
|
|
167
|
+
request: toolkitRequest(session.page.request, config, testId, site),
|
|
168
|
+
builders: {
|
|
169
|
+
page: () => new PageBuilder(session.page, builderContext),
|
|
170
|
+
content: () => new ContentBuilder(session.page, builderContext),
|
|
171
|
+
batch: (...queued) => saveBatch(session.page, builderContext, queued),
|
|
172
|
+
},
|
|
173
|
+
saveRecord: recordSaver(session.page.request, resolveRequestContext(session.page, builderContext)),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
await session.close();
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
return { outcome, site };
|
|
182
|
+
});
|
|
172
183
|
const data = applyScenarioOutcome(outcome, (reason) => testInfo.skip(true, reason), config.replay);
|
|
173
184
|
if (outcome.status === 'ready') {
|
|
174
185
|
// The fixture's own timeout keeps this out of the test's duration,
|
|
@@ -178,7 +189,7 @@ export function defineScenario(setup) {
|
|
|
178
189
|
description: setupAnnotation(outcome.setupMs, outcome.setupRan),
|
|
179
190
|
});
|
|
180
191
|
}
|
|
181
|
-
await use({ data, testId: outcome.status === 'ready' ? outcome.testId : '' });
|
|
192
|
+
await use({ data, testId: outcome.status === 'ready' ? outcome.testId : '', site });
|
|
182
193
|
if (testInfo.status !== testInfo.expectedStatus) {
|
|
183
194
|
recordTestFailure(config, key, testInfo.error?.message ?? `test ${testInfo.status}`);
|
|
184
195
|
await reportRecordedErrors(config, key, outcome.status === 'ready' ? outcome.testId : '', testInfo);
|
|
@@ -190,12 +201,17 @@ export function defineScenario(setup) {
|
|
|
190
201
|
testId: async ({ resolvedScenario }, use) => {
|
|
191
202
|
await use(resolvedScenario.testId);
|
|
192
203
|
},
|
|
193
|
-
|
|
204
|
+
baseURL: async ({ resolvedScenario }, use) => {
|
|
205
|
+
await use(resolvedScenario.site.base);
|
|
206
|
+
},
|
|
207
|
+
context: async ({ context, testId, resolvedScenario }, use) => {
|
|
208
|
+
;
|
|
209
|
+
context.site = resolvedScenario.site;
|
|
194
210
|
await prepareScenarioContext(context, getToolkitConfig(), testId);
|
|
195
211
|
await use(context);
|
|
196
212
|
},
|
|
197
|
-
request: async ({ request, testId }, use) => {
|
|
198
|
-
await use(toolkitRequest(request, getToolkitConfig(), testId));
|
|
213
|
+
request: async ({ request, testId, resolvedScenario }, use) => {
|
|
214
|
+
await use(toolkitRequest(request, getToolkitConfig(), testId, resolvedScenario.site));
|
|
199
215
|
},
|
|
200
216
|
automaticAccessibilityScan: [
|
|
201
217
|
async ({ page }, use, testInfo) => {
|
package/dist/scenario.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/setup-cache/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/setup-cache/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,iBAAiB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5D,KAAK,CACD,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAChC;AAED,wBAAgB,cAAc,CAC1B,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,gBAAgB,CA6ClB"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { SECRET_HEADER, resolveApiSecret } from '../http/api-secret.js';
|
|
2
|
+
import { testApiUrl } from '../http/test-api.js';
|
|
2
3
|
export function httpSetupCache(config, options = {}) {
|
|
3
4
|
const doFetch = options.fetchImpl ?? fetch;
|
|
4
5
|
const timeoutMs = options.timeoutMs ?? (Number(process.env.PW_CLEANUP_TIMEOUT_MS) || 30000);
|
|
5
6
|
async function post(operation, payload) {
|
|
6
|
-
const url =
|
|
7
|
+
const url = testApiUrl(config, `setup-cache/${operation}`);
|
|
7
8
|
const response = await doFetch(url, {
|
|
8
9
|
method: 'POST',
|
|
9
10
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/setup-cache/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/setup-cache/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAqBhD,MAAM,UAAU,cAAc,CAC1B,MAAqB,EACrB,UAA4D,EAAE;IAE9D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,CAAA;IAE3F,KAAK,UAAU,IAAI,CAAC,SAAiB,EAAE,OAAgC;QACnE,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,eAAe,SAAS,EAAE,CAAC,CAAA;QAE1D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC;aAC5C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtC,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAA;IAC7D,CAAC;IAED,OAAO;QACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,GAAW;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAErD,OAAO;gBACH,OAAO,EAAE,MAAM,CAAC,OAA4B;gBAC5C,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B;gBACtD,MAAM,EAAE,QAAQ,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;aACjE,CAAA;QACL,CAAC;QAED,KAAK,CAAC,KAAK,CACP,MAAc,EACd,GAAW,EACX,KAA8B,EAC9B,aAAa,GAAG,KAAK;YAErB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,OAA4B,CAAA;QACpG,CAAC;KACJ,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DiscoveredSite, SiteEntry } from './registry.js';
|
|
2
|
+
export declare function probeSignature(secret: string, testId: string): string;
|
|
3
|
+
export declare function probeSite(site: DiscoveredSite, options: {
|
|
4
|
+
testId: string;
|
|
5
|
+
secret: string;
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
}): Promise<SiteEntry>;
|
|
8
|
+
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/sites/probe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAI9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAsB,SAAS,CAC3B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,GACtE,OAAO,CAAC,SAAS,CAAC,CAqCpB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createHmac } from 'node:crypto';
|
|
2
|
+
import { PROBE_HEADER, TEST_ID_HEADER } from '../contract.js';
|
|
3
|
+
const PURPOSE = 'probe';
|
|
4
|
+
export function probeSignature(secret, testId) {
|
|
5
|
+
return createHmac('sha256', secret).update(`${PURPOSE}:${testId}`).digest('hex');
|
|
6
|
+
}
|
|
7
|
+
export async function probeSite(site, options) {
|
|
8
|
+
const unavailable = (reason) => ({ ...site, available: false, reason });
|
|
9
|
+
let response;
|
|
10
|
+
try {
|
|
11
|
+
response = await (options.fetchImpl ?? fetch)(site.base, {
|
|
12
|
+
method: 'GET',
|
|
13
|
+
redirect: 'manual',
|
|
14
|
+
signal: AbortSignal.timeout(Number(process.env.PW_HEALTH_TIMEOUT_MS) || 5000),
|
|
15
|
+
headers: {
|
|
16
|
+
[TEST_ID_HEADER]: options.testId,
|
|
17
|
+
[PROBE_HEADER]: probeSignature(options.secret, options.testId),
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return unavailable(error instanceof Error ? error.message : String(error));
|
|
23
|
+
}
|
|
24
|
+
if (response.status >= 300 && response.status < 400) {
|
|
25
|
+
return unavailable(`it redirects to ${response.headers.get('location') ?? '(no location)'}`);
|
|
26
|
+
}
|
|
27
|
+
if (response.status >= 500) {
|
|
28
|
+
return unavailable(`it answered ${response.status}`);
|
|
29
|
+
}
|
|
30
|
+
const answer = await readAnswer(response);
|
|
31
|
+
if (undefined === answer || answer.testId !== options.testId) {
|
|
32
|
+
return unavailable('no toolkit answered: the host is not in the Testing context, or it is another installation');
|
|
33
|
+
}
|
|
34
|
+
if ('string' !== typeof answer.database) {
|
|
35
|
+
return unavailable('another installation answered: the test database is not selected there');
|
|
36
|
+
}
|
|
37
|
+
if (answer.site !== site.identifier) {
|
|
38
|
+
return unavailable(`this host serves the site "${String(answer.site)}"`);
|
|
39
|
+
}
|
|
40
|
+
return { ...site, available: true };
|
|
41
|
+
}
|
|
42
|
+
async function readAnswer(response) {
|
|
43
|
+
try {
|
|
44
|
+
return (await response.json());
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/sites/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG7D,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,MAAc;IACzD,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,IAAoB,EACpB,OAAqE;IAErE,MAAM,WAAW,GAAG,CAAC,MAAc,EAAa,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAE1F,IAAI,QAAkB,CAAA;IACtB,IAAI,CAAC;QACD,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YACrD,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC;YAC7E,OAAO,EAAE;gBACL,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM;gBAChC,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;aACjE;SACJ,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC,mBAAmB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IAChG,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,eAAe,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3D,OAAO,WAAW,CAAC,4FAA4F,CAAC,CAAA;IACpH,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,WAAW,CAAC,wEAAwE,CAAC,CAAA;IAChG,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC,8BAA8B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5E,CAAC;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AACvC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAkB;IACxC,IAAI,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ToolkitConfig } from '../config.js';
|
|
2
|
+
export interface DiscoveredSite {
|
|
3
|
+
identifier: string;
|
|
4
|
+
rootPageId: number;
|
|
5
|
+
base: string;
|
|
6
|
+
}
|
|
7
|
+
export type SiteEntry = DiscoveredSite & ({
|
|
8
|
+
available: true;
|
|
9
|
+
} | {
|
|
10
|
+
available: false;
|
|
11
|
+
reason: string;
|
|
12
|
+
});
|
|
13
|
+
export type SitesFile = {
|
|
14
|
+
sites: SiteEntry[];
|
|
15
|
+
} | {
|
|
16
|
+
skipped: string;
|
|
17
|
+
};
|
|
18
|
+
export interface ScenarioSite {
|
|
19
|
+
identifier: string;
|
|
20
|
+
rootPageId: number;
|
|
21
|
+
base: string;
|
|
22
|
+
origin: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function parseDiscoveredSites(value: unknown, testingURL: string): DiscoveredSite[];
|
|
25
|
+
export declare function writeSitesFile(config: ToolkitConfig, file: SitesFile): void;
|
|
26
|
+
export declare function readSitesFile(config: ToolkitConfig): SitesFile | undefined;
|
|
27
|
+
export declare function resolveScenarioSite(config: ToolkitConfig, file: SitesFile | undefined, requested?: string): ScenarioSite;
|
|
28
|
+
export declare function testingOrigins(config: ToolkitConfig, file?: SitesFile | undefined): Set<string>;
|
|
29
|
+
export declare function siteURL(identifier: string, target?: string): string;
|
|
30
|
+
export declare function siteCacheKey(scenarioKey: string, site: ScenarioSite): string;
|
|
31
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAGnE,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAErG,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpE,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACjB;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAazF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAE3E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,CAM1E;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAgCxH;AA+BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,GAAE,SAAS,GAAG,SAAiC,GAAG,GAAG,CAAC,MAAM,CAAC,CAWtH;AAED,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAI/D;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAE5E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getToolkitConfig } from '../config.js';
|
|
4
|
+
import { runPaths } from '../state/run-namespace.js';
|
|
5
|
+
const SITES_FILE = 'sites.json';
|
|
6
|
+
const FALLBACK_ROOT_PAGE_ID = 1;
|
|
7
|
+
export function parseDiscoveredSites(value, testingURL) {
|
|
8
|
+
if (!Array.isArray(value)) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
return value.flatMap((entry) => {
|
|
12
|
+
const { identifier, rootPageId, base } = (entry ?? {});
|
|
13
|
+
if ('string' !== typeof identifier || 'number' !== typeof rootPageId || 'string' !== typeof base) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
return [{ identifier, rootPageId, base: new URL(base, `${testingURL}/`).toString() }];
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function writeSitesFile(config, file) {
|
|
20
|
+
fs.writeFileSync(sitesFile(config), JSON.stringify(file, null, 2));
|
|
21
|
+
}
|
|
22
|
+
export function readSitesFile(config) {
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(fs.readFileSync(sitesFile(config), 'utf8'));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function sitesFile(config) {
|
|
31
|
+
return path.join(runPaths(config).runDir, SITES_FILE);
|
|
32
|
+
}
|
|
33
|
+
export function resolveScenarioSite(config, file, requested) {
|
|
34
|
+
if (undefined === file || 'skipped' in file) {
|
|
35
|
+
if (undefined === requested) {
|
|
36
|
+
return fallbackSite(config);
|
|
37
|
+
}
|
|
38
|
+
const why = undefined === file
|
|
39
|
+
? 'this run has no site list, so its global setup did not run'
|
|
40
|
+
: `site discovery was skipped (${file.skipped})`;
|
|
41
|
+
throw new Error(`[typo3-playwright-toolkit] This scenario names the site "${requested}", but ${why}.`);
|
|
42
|
+
}
|
|
43
|
+
if (undefined === requested && 0 === file.sites.length) {
|
|
44
|
+
return fallbackSite(config);
|
|
45
|
+
}
|
|
46
|
+
const site = undefined === requested
|
|
47
|
+
? defaultSite(config, file.sites)
|
|
48
|
+
: file.sites.find((entry) => entry.identifier === requested);
|
|
49
|
+
if (undefined === site) {
|
|
50
|
+
throw new Error(`[typo3-playwright-toolkit] This installation has no site "${requested}". Its sites: ${names(file.sites)}.`);
|
|
51
|
+
}
|
|
52
|
+
if (!site.available) {
|
|
53
|
+
throw new Error(`[typo3-playwright-toolkit] The site "${site.identifier}" (${site.base}) is unavailable: ${site.reason}.`);
|
|
54
|
+
}
|
|
55
|
+
return { identifier: site.identifier, rootPageId: site.rootPageId, base: site.base, origin: new URL(site.base).origin };
|
|
56
|
+
}
|
|
57
|
+
function fallbackSite(config) {
|
|
58
|
+
return {
|
|
59
|
+
identifier: '',
|
|
60
|
+
rootPageId: FALLBACK_ROOT_PAGE_ID,
|
|
61
|
+
base: `${config.testingURL}/`,
|
|
62
|
+
origin: new URL(config.testingURL).origin,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function defaultSite(config, sites) {
|
|
66
|
+
if (1 === sites.length) {
|
|
67
|
+
return sites[0];
|
|
68
|
+
}
|
|
69
|
+
const host = new URL(config.testingURL).host;
|
|
70
|
+
const matching = sites.filter((entry) => new URL(entry.base).host === host);
|
|
71
|
+
if (1 !== matching.length) {
|
|
72
|
+
throw new Error(`[typo3-playwright-toolkit] This installation has several sites. Name one with \`site\`: ${names(sites)}.`);
|
|
73
|
+
}
|
|
74
|
+
return matching[0];
|
|
75
|
+
}
|
|
76
|
+
function names(sites) {
|
|
77
|
+
return sites.map((site) => site.identifier).join(', ');
|
|
78
|
+
}
|
|
79
|
+
export function testingOrigins(config, file = readSitesFile(config)) {
|
|
80
|
+
const origins = new Set([new URL(config.testingURL).origin]);
|
|
81
|
+
if (undefined !== file && 'sites' in file) {
|
|
82
|
+
for (const site of file.sites) {
|
|
83
|
+
if (site.available) {
|
|
84
|
+
origins.add(new URL(site.base).origin);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return origins;
|
|
89
|
+
}
|
|
90
|
+
export function siteURL(identifier, target = '') {
|
|
91
|
+
const config = getToolkitConfig();
|
|
92
|
+
return new URL(target.replace(/^\/+/, ''), resolveScenarioSite(config, readSitesFile(config), identifier).base).toString();
|
|
93
|
+
}
|
|
94
|
+
export function siteCacheKey(scenarioKey, site) {
|
|
95
|
+
return '' === site.identifier ? scenarioKey : `${scenarioKey}@${site.base}#${site.rootPageId}`;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ export interface AttemptOutcomeRecord {
|
|
|
17
17
|
durationMs: number;
|
|
18
18
|
endedAt: string;
|
|
19
19
|
}
|
|
20
|
+
export interface DroppedRecord {
|
|
21
|
+
type: 'dropped';
|
|
22
|
+
testId: string;
|
|
23
|
+
}
|
|
20
24
|
export declare function registerAttempt(config: ToolkitConfig, input: {
|
|
21
25
|
key: string;
|
|
22
26
|
name?: string;
|
|
@@ -30,6 +34,7 @@ export declare function recordAttemptOutcome(config: ToolkitConfig, input: {
|
|
|
30
34
|
outcome: AttemptOutcome;
|
|
31
35
|
durationMs: number;
|
|
32
36
|
}): void;
|
|
37
|
+
export declare function recordDropped(config: ToolkitConfig, testId: string): void;
|
|
33
38
|
export declare function readAttemptsFrom(attemptsFile: string): AttemptRecord[];
|
|
34
39
|
export declare function readAttempts(config: ToolkitConfig): AttemptRecord[];
|
|
35
40
|
export declare function readRegisteredTestIds(config: ToolkitConfig): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt-registry.d.ts","sourceRoot":"","sources":["../../src/state/attempt-registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAClB;AAQD,wBAAgB,eAAe,CAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtF,IAAI,CAYN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvE,IAAI,CAUN;AAWD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBtE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAErE"}
|
|
1
|
+
{"version":3,"file":"attempt-registry.d.ts","sourceRoot":"","sources":["../../src/state/attempt-registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AAQD,wBAAgB,eAAe,CAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtF,IAAI,CAYN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvE,IAAI,CAUN;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzE;AAWD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBtE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAErE"}
|
|
@@ -31,6 +31,9 @@ export function recordAttemptOutcome(config, input) {
|
|
|
31
31
|
endedAt: new Date().toISOString(),
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
+
export function recordDropped(config, testId) {
|
|
35
|
+
appendLine(ensureRunNamespace(config), { type: 'dropped', testId });
|
|
36
|
+
}
|
|
34
37
|
function isAttemptRecord(value) {
|
|
35
38
|
if (typeof value !== 'object' || value === null) {
|
|
36
39
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt-registry.js","sourceRoot":"","sources":["../../src/state/attempt-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAiB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"attempt-registry.js","sourceRoot":"","sources":["../../src/state/attempt-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-namespace.d.ts","sourceRoot":"","sources":["../../src/state/run-namespace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"run-namespace.d.ts","sourceRoot":"","sources":["../../src/state/run-namespace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAaxD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAQlE;AAED,0EAA0E;AAC1E,eAAO,MAAM,eAAe,QAAS,CAAA;AAErC,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAuB1D;AA0CD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAUrD;AAED,eAAO,MAAM,aAAa,aAAa,CAAA;AAEvC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrD;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvD"}
|
|
@@ -2,6 +2,7 @@ import { createHash, randomBytes } from 'node:crypto';
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { resolveRunId, RUN_ID_PATTERN } from './run-id.js';
|
|
5
|
+
import { recordTestingUrl } from './testing-url.js';
|
|
5
6
|
export function runsRoot(stateDir) {
|
|
6
7
|
return path.join(stateDir, 'runs');
|
|
7
8
|
}
|
|
@@ -30,12 +31,14 @@ export const OWNER_ACTIVE_MS = 30_000;
|
|
|
30
31
|
export function prepareRun(config) {
|
|
31
32
|
const paths = ensureRunNamespace(config);
|
|
32
33
|
assertNamespaceIsFree(paths);
|
|
34
|
+
recordTestingUrl(config.paths.stateDir, config);
|
|
33
35
|
if (!fs.existsSync(paths.metaFile)) {
|
|
34
36
|
fs.writeFileSync(paths.metaFile, JSON.stringify({
|
|
35
37
|
runId: paths.runId,
|
|
36
38
|
startedAt: new Date().toISOString(),
|
|
37
39
|
ownerPid: process.pid,
|
|
38
40
|
testingURL: config.testingURL,
|
|
41
|
+
backendPath: config.backendPath,
|
|
39
42
|
}, null, 2));
|
|
40
43
|
}
|
|
41
44
|
return paths;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-namespace.js","sourceRoot":"","sources":["../../src/state/run-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"run-namespace.js","sourceRoot":"","sources":["../../src/state/run-namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type TestApiTarget } from '../http/test-api.js';
|
|
2
|
+
export declare function recordTestingUrl(stateDir: string, target: TestApiTarget): void;
|
|
3
|
+
export declare function recordedTestApiTarget(stateDir: string): TestApiTarget | undefined;
|
|
4
|
+
//# sourceMappingURL=testing-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing-url.d.ts","sourceRoot":"","sources":["../../src/state/testing-url.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAO3E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAK9E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { readTestApiTarget } from '../http/test-api.js';
|
|
4
|
+
// Outside runs/: a passing run removes its run directory.
|
|
5
|
+
function testingUrlFile(stateDir) {
|
|
6
|
+
return path.join(stateDir, 'testing-url.json');
|
|
7
|
+
}
|
|
8
|
+
export function recordTestingUrl(stateDir, target) {
|
|
9
|
+
fs.writeFileSync(testingUrlFile(stateDir), JSON.stringify({ testingURL: target.testingURL, backendPath: target.backendPath }));
|
|
10
|
+
}
|
|
11
|
+
export function recordedTestApiTarget(stateDir) {
|
|
12
|
+
return readTestApiTarget(testingUrlFile(stateDir));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=testing-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing-url.js","sourceRoot":"","sources":["../../src/state/testing-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAsB,MAAM,qBAAqB,CAAA;AAE3E,0DAA0D;AAC1D,SAAS,cAAc,CAAC,QAAgB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAqB;IACpE,EAAE,CAAC,aAAa,CACZ,cAAc,CAAC,QAAQ,CAAC,EACxB,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CACrF,CAAA;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IAClD,OAAO,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;AACtD,CAAC"}
|