@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.
Files changed (117) hide show
  1. package/README.md +39 -5
  2. package/dist/builders/content-builder.d.ts +4 -0
  3. package/dist/builders/content-builder.d.ts.map +1 -1
  4. package/dist/builders/content-builder.js +10 -1
  5. package/dist/builders/content-builder.js.map +1 -1
  6. package/dist/builders/core-content.d.ts +1 -1
  7. package/dist/builders/core-content.d.ts.map +1 -1
  8. package/dist/builders/core-content.js +1 -1
  9. package/dist/builders/core-content.js.map +1 -1
  10. package/dist/builders/page-builder.d.ts +3 -1
  11. package/dist/builders/page-builder.d.ts.map +1 -1
  12. package/dist/builders/page-builder.js +18 -14
  13. package/dist/builders/page-builder.js.map +1 -1
  14. package/dist/builders/relations.d.ts.map +1 -1
  15. package/dist/builders/relations.js +3 -2
  16. package/dist/builders/relations.js.map +1 -1
  17. package/dist/builders/request-context.d.ts +1 -2
  18. package/dist/builders/request-context.d.ts.map +1 -1
  19. package/dist/builders/request-context.js +3 -3
  20. package/dist/builders/request-context.js.map +1 -1
  21. package/dist/checks/csp.d.ts.map +1 -1
  22. package/dist/checks/csp.js +4 -1
  23. package/dist/checks/csp.js.map +1 -1
  24. package/dist/checks/screenshot.d.ts +5 -2
  25. package/dist/checks/screenshot.d.ts.map +1 -1
  26. package/dist/checks/screenshot.js +35 -40
  27. package/dist/checks/screenshot.js.map +1 -1
  28. package/dist/clean/cli.js +16 -11
  29. package/dist/clean/cli.js.map +1 -1
  30. package/dist/config.d.ts +5 -5
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +4 -9
  33. package/dist/config.js.map +1 -1
  34. package/dist/contract.d.ts +2 -0
  35. package/dist/contract.d.ts.map +1 -1
  36. package/dist/contract.js +2 -0
  37. package/dist/contract.js.map +1 -1
  38. package/dist/doctor/reporter.d.ts.map +1 -1
  39. package/dist/doctor/reporter.js +2 -1
  40. package/dist/doctor/reporter.js.map +1 -1
  41. package/dist/global-setup.d.ts +4 -1
  42. package/dist/global-setup.d.ts.map +1 -1
  43. package/dist/global-setup.js +34 -8
  44. package/dist/global-setup.js.map +1 -1
  45. package/dist/global-teardown.d.ts +5 -1
  46. package/dist/global-teardown.d.ts.map +1 -1
  47. package/dist/global-teardown.js +19 -42
  48. package/dist/global-teardown.js.map +1 -1
  49. package/dist/http/cleanup-client.d.ts.map +1 -1
  50. package/dist/http/cleanup-client.js +2 -1
  51. package/dist/http/cleanup-client.js.map +1 -1
  52. package/dist/http/off-site-headers.d.ts +1 -1
  53. package/dist/http/off-site-headers.d.ts.map +1 -1
  54. package/dist/http/off-site-headers.js +3 -3
  55. package/dist/http/off-site-headers.js.map +1 -1
  56. package/dist/http/record-edit.d.ts +1 -0
  57. package/dist/http/record-edit.d.ts.map +1 -1
  58. package/dist/http/record-edit.js +51 -5
  59. package/dist/http/record-edit.js.map +1 -1
  60. package/dist/http/recorded-errors.d.ts.map +1 -1
  61. package/dist/http/recorded-errors.js +2 -1
  62. package/dist/http/recorded-errors.js.map +1 -1
  63. package/dist/http/test-api.d.ts +9 -0
  64. package/dist/http/test-api.d.ts.map +1 -0
  65. package/dist/http/test-api.js +29 -0
  66. package/dist/http/test-api.js.map +1 -0
  67. package/dist/http/toolkit-request.d.ts +2 -1
  68. package/dist/http/toolkit-request.d.ts.map +1 -1
  69. package/dist/http/toolkit-request.js +14 -4
  70. package/dist/http/toolkit-request.js.map +1 -1
  71. package/dist/index.d.ts +2 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/inspect/cli.js +4 -4
  76. package/dist/inspect/cli.js.map +1 -1
  77. package/dist/inspect/links.d.ts +0 -2
  78. package/dist/inspect/links.d.ts.map +1 -1
  79. package/dist/inspect/links.js +25 -17
  80. package/dist/inspect/links.js.map +1 -1
  81. package/dist/inspect/replay-target.d.ts +3 -2
  82. package/dist/inspect/replay-target.d.ts.map +1 -1
  83. package/dist/inspect/replay-target.js +5 -12
  84. package/dist/inspect/replay-target.js.map +1 -1
  85. package/dist/inspect/token.d.ts +2 -1
  86. package/dist/inspect/token.d.ts.map +1 -1
  87. package/dist/inspect/token.js +3 -4
  88. package/dist/inspect/token.js.map +1 -1
  89. package/dist/scenario.d.ts +10 -4
  90. package/dist/scenario.d.ts.map +1 -1
  91. package/dist/scenario.js +60 -44
  92. package/dist/scenario.js.map +1 -1
  93. package/dist/setup-cache/client.d.ts.map +1 -1
  94. package/dist/setup-cache/client.js +2 -1
  95. package/dist/setup-cache/client.js.map +1 -1
  96. package/dist/sites/probe.d.ts +8 -0
  97. package/dist/sites/probe.d.ts.map +1 -0
  98. package/dist/sites/probe.js +50 -0
  99. package/dist/sites/probe.js.map +1 -0
  100. package/dist/sites/registry.d.ts +31 -0
  101. package/dist/sites/registry.d.ts.map +1 -0
  102. package/dist/sites/registry.js +97 -0
  103. package/dist/sites/registry.js.map +1 -0
  104. package/dist/state/attempt-registry.d.ts +5 -0
  105. package/dist/state/attempt-registry.d.ts.map +1 -1
  106. package/dist/state/attempt-registry.js +3 -0
  107. package/dist/state/attempt-registry.js.map +1 -1
  108. package/dist/state/run-namespace.d.ts.map +1 -1
  109. package/dist/state/run-namespace.js +3 -0
  110. package/dist/state/run-namespace.js.map +1 -1
  111. package/dist/state/testing-url.d.ts +4 -0
  112. package/dist/state/testing-url.d.ts.map +1 -0
  113. package/dist/state/testing-url.js +14 -0
  114. package/dist/state/testing-url.js.map +1 -0
  115. package/dist/types/playwright-extensions.d.ts +2 -0
  116. package/dist/types/playwright-extensions.d.ts.map +1 -1
  117. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"recorded-errors.js","sourceRoot":"","sources":["../../src/http/recorded-errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAwBjE,mFAAmF;AACnF,MAAM,YAAY,GAA2B;IACzC,GAAG,EAAE,KAAK;IACV,WAAW,EAAE,aAAa;CAC7B,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,MAA2B;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAA;QACzD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QAE3D,OAAO,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,GAAG,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,OAAO,CACH,6CAA6C,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG;QACpE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,kBAAkB,WAAW,IAAI;QACnF,SAAS,MAAM,CAAC,MAAM,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACxD,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAqB,EACrB,MAAc,EACd,UAA6E,EAAE;IAE/E,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAE1C,yEAAyE;IACzE,IAAI,CAAC;QACD,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC1B,GAAG,MAAM,CAAC,UAAU,6BAA6B,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAC7E;YACI,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;YACtD,wDAAwD;YACxD,QAAQ,EAAE,QAAQ;SACrB,CACJ,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiC,CAAA;QAEpE,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;YAClC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SACxD,CAAA;IACL,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"recorded-errors.js","sourceRoot":"","sources":["../../src/http/recorded-errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAwB1C,mFAAmF;AACnF,MAAM,YAAY,GAA2B;IACzC,GAAG,EAAE,KAAK;IACV,WAAW,EAAE,aAAa;CAC7B,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,MAA2B;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAA;QACzD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QAE3D,OAAO,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,GAAG,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,OAAO,CACH,6CAA6C,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG;QACpE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,kBAAkB,WAAW,IAAI;QACnF,SAAS,MAAM,CAAC,MAAM,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACxD,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAqB,EACrB,MAAc,EACd,UAA6E,EAAE;IAE/E,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAE1C,yEAAyE;IACzE,IAAI,CAAC;QACD,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC1B,UAAU,CAAC,MAAM,EAAE,aAAa,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAC7D;YACI,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;YACtD,wDAAwD;YACxD,QAAQ,EAAE,QAAQ;SACrB,CACJ,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiC,CAAA;QAEpE,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;YAClC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SACxD,CAAA;IACL,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const DEFAULT_BACKEND_PATH = "/typo3";
2
+ export interface TestApiTarget {
3
+ testingURL: string;
4
+ backendPath?: string;
5
+ }
6
+ export declare function normaliseBackendPath(backendPath: string): string;
7
+ export declare function readTestApiTarget(file: string): TestApiTarget | undefined;
8
+ export declare function testApiUrl(target: TestApiTarget, endpoint: string): string;
9
+ //# sourceMappingURL=test-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-api.d.ts","sourceRoot":"","sources":["../../src/http/test-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,WAAW,CAAA;AAE5C,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUhE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAgBzE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E"}
@@ -0,0 +1,29 @@
1
+ import * as fs from 'fs';
2
+ export const DEFAULT_BACKEND_PATH = '/typo3';
3
+ export function normaliseBackendPath(backendPath) {
4
+ if (/[?#:]/.test(backendPath)) {
5
+ throw new Error(`[typo3-playwright-toolkit] backendPath must be the path of BE/entryPoint, such as /admin, got "${backendPath}".`);
6
+ }
7
+ const segments = backendPath.split('/').filter((segment) => '' !== segment);
8
+ return 0 === segments.length ? DEFAULT_BACKEND_PATH : `/${segments.join('/')}`;
9
+ }
10
+ export function readTestApiTarget(file) {
11
+ let recorded;
12
+ try {
13
+ recorded = JSON.parse(fs.readFileSync(file, 'utf-8'));
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ if ('string' !== typeof recorded?.testingURL) {
19
+ return undefined;
20
+ }
21
+ return {
22
+ testingURL: recorded.testingURL,
23
+ backendPath: 'string' === typeof recorded.backendPath ? recorded.backendPath : undefined,
24
+ };
25
+ }
26
+ export function testApiUrl(target, endpoint) {
27
+ return `${target.testingURL}${target.backendPath ?? DEFAULT_BACKEND_PATH}/test-api/${endpoint}`;
28
+ }
29
+ //# sourceMappingURL=test-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-api.js","sourceRoot":"","sources":["../../src/http/test-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAA;AAO5C,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACpD,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACX,kGAAkG,WAAW,IAAI,CACpH,CAAA;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAE3E,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC1C,IAAI,QAAgE,CAAA;IACpE,IAAI,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAoB,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,OAAO;QACH,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,WAAW,EAAE,QAAQ,KAAK,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KAC3F,CAAA;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,QAAgB;IAC9D,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,oBAAoB,aAAa,QAAQ,EAAE,CAAA;AACnG,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type { APIRequestContext } from '@playwright/test';
2
2
  import type { ToolkitConfig } from '../config.js';
3
+ import { type ScenarioSite } from '../sites/registry.js';
3
4
  /**
4
5
  * Playwright does not route an APIRequestContext, so the test ID has to be put on
5
6
  * here instead. No secret: it stays explicit, on the two requests that need it.
6
7
  */
7
- export declare function toolkitRequest(request: APIRequestContext, config: ToolkitConfig, testId: string): APIRequestContext;
8
+ export declare function toolkitRequest(request: APIRequestContext, config: ToolkitConfig, testId: string, scenarioSite?: ScenarioSite): APIRequestContext;
8
9
  //# sourceMappingURL=toolkit-request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolkit-request.d.ts","sourceRoot":"","sources":["../../src/http/toolkit-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKjD;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,GACf,iBAAiB,CA2CnB"}
1
+ {"version":3,"file":"toolkit-request.d.ts","sourceRoot":"","sources":["../../src/http/toolkit-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAKxE;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,YAAY,GAC5B,iBAAiB,CAmDnB"}
@@ -1,19 +1,29 @@
1
1
  import { SECRET_HEADER } from './api-secret.js';
2
2
  import { TEST_ID_HEADER, browserHeaders } from '../contract.js';
3
+ import { testingOrigins } from '../sites/registry.js';
3
4
  const TOOLKIT_HEADERS = [TEST_ID_HEADER.toLowerCase(), SECRET_HEADER.toLowerCase()];
4
5
  const SENDING_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'head', 'fetch'];
5
6
  /**
6
7
  * Playwright does not route an APIRequestContext, so the test ID has to be put on
7
8
  * here instead. No secret: it stays explicit, on the two requests that need it.
8
9
  */
9
- export function toolkitRequest(request, config, testId) {
10
- const site = new URL(config.testingURL).origin;
10
+ export function toolkitRequest(request, config, testId, scenarioSite) {
11
+ const origins = testingOrigins(config);
12
+ const base = scenarioSite?.base ?? `${config.testingURL}/`;
13
+ const resolved = (target) => {
14
+ try {
15
+ return 'string' === typeof target ? new URL(target, base).toString() : target;
16
+ }
17
+ catch {
18
+ return target;
19
+ }
20
+ };
11
21
  const onSite = (target) => {
12
22
  const url = 'string' === typeof target ? target : String(target?.url?.() ?? '');
13
23
  try {
14
24
  // Resolved like baseURL does: a relative url lands here, a
15
25
  // protocol-relative one on its own host.
16
- return new URL(url, site).origin === site;
26
+ return origins.has(new URL(url, base).origin);
17
27
  }
18
28
  catch {
19
29
  return false;
@@ -34,7 +44,7 @@ export function toolkitRequest(request, config, testId) {
34
44
  if ('string' !== typeof property || !SENDING_METHODS.includes(property)) {
35
45
  return value.bind(target);
36
46
  }
37
- return (url, options = {}) => value.call(target, url, {
47
+ return (url, options = {}) => value.call(target, resolved(url), {
38
48
  ...options,
39
49
  headers: headersFor(url, options.headers),
40
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"toolkit-request.js","sourceRoot":"","sources":["../../src/http/toolkit-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG/D,MAAM,eAAe,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,CAAA;AACnF,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAElF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC1B,OAA0B,EAC1B,MAAqB,EACrB,MAAc;IAEd,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAA;IAE9C,MAAM,MAAM,GAAG,CAAC,MAAe,EAAW,EAAE;QACxC,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAE,MAAiC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3G,IAAI,CAAC;YACD,2DAA2D;YAC3D,yCAAyC;YACzC,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,MAAe,EAAE,QAAgC,EAAE,EAA0B,EAAE;QAC/F,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAA;QAC1E,CAAC;QAED,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAC1F,CAAA;IACL,CAAC,CAAA;IAED,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACtB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC1B,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAE9D,IAAI,UAAU,KAAK,OAAO,KAAK,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAA;YAChB,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,OAAQ,KAAyC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClE,CAAC;YAED,OAAO,CAAC,GAAY,EAAE,UAAgD,EAAE,EAAE,EAAE,CACvE,KAAyC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzD,GAAG,OAAO;gBACV,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC,CAAA;QACV,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"toolkit-request.js","sourceRoot":"","sources":["../../src/http/toolkit-request.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export { defineScenario, type ScenarioBuilders, type ScenarioFixtures, type SetupTools, } from './scenario.js';
1
+ export { defineScenario, type ScenarioBuilders, type ScenarioFixtures, type ScenarioOptions, type SetupTools, } from './scenario.js';
2
+ export { siteURL } from './sites/registry.js';
2
3
  export { expect } from '@playwright/test';
3
4
  export { defineToolkitConfig, getToolkitConfig, type ToolkitConfig, type ToolkitConfigInput, type ToolkitPaths, type ToolkitScreenshotConfig, type ContentTypeConstructor, } from './config.js';
4
5
  export { defineBasePlaywrightConfig, type BasePlaywrightOverrides } from './playwright/base-config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzF,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,GAC1B,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACxF,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,UAAU,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzF,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,GAC1B,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACxF,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { defineScenario, } from './scenario.js';
2
+ export { siteURL } from './sites/registry.js';
2
3
  export { expect } from '@playwright/test';
3
4
  export { defineToolkitConfig, getToolkitConfig, } from './config.js';
4
5
  export { defineBasePlaywrightConfig } from './playwright/base-config.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,GAIjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,GAMnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAgC,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAsB,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,GAGd,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,GAKjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACH,mBAAmB,EACnB,gBAAgB,GAMnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAgC,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAsB,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,GAGd,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
@@ -3,7 +3,7 @@ import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { findStateDir, inspectLinks } from './links.js';
5
5
  import { INSPECT_TOKEN_LIFETIME_MS, inspectUrl } from './token.js';
6
- import { replayTestingUrl } from './replay-target.js';
6
+ import { replayTarget } from './replay-target.js';
7
7
  import { REPLAY_TEST_ID } from '../contract.js';
8
8
  function readSecret(stateDir) {
9
9
  const fromEnvironment = process.env.PLAYWRIGHT_TOOLKIT_SECRET?.trim();
@@ -26,13 +26,13 @@ if ('' === secret) {
26
26
  }
27
27
  // The link a replay run printed expires, and its run state is gone by then.
28
28
  if (process.argv.includes('--replay')) {
29
- const testingURL = replayTestingUrl(stateDir);
30
- if (undefined === testingURL) {
29
+ const target = replayTarget(stateDir);
30
+ if (undefined === target) {
31
31
  console.error('No replay recorded. Run "ddev playwright replay" first.');
32
32
  process.exit(1);
33
33
  }
34
34
  console.log(`Logs you into the replayed database, for ${INSPECT_TOKEN_LIFETIME_MS / 60_000} minutes.\n`);
35
- console.log(` ${inspectUrl(testingURL, secret, REPLAY_TEST_ID, Date.now())}\n`);
35
+ console.log(` ${inspectUrl(target, secret, REPLAY_TEST_ID, Date.now())}\n`);
36
36
  process.exit(0);
37
37
  }
38
38
  const links = inspectLinks(stateDir, secret);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/inspect/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/inspect/cli.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,4 @@ export interface InspectLink {
7
7
  }
8
8
  export declare function findStateDir(from: string): string | undefined;
9
9
  export declare function inspectLinks(stateDir: string, secret: string, now?: number): InspectLink[];
10
- /** Every run of a project records the same URL, so the newest one that has it wins. */
11
- export declare function recordedTestingUrl(stateDir: string): string | undefined;
12
10
  //# sourceMappingURL=links.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/inspect/links.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB7D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,WAAW,EAAE,CAqBtG;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvE"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/inspect/links.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB7D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,WAAW,EAAE,CAwBtG"}
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import { readTestApiTarget } from '../http/test-api.js';
3
4
  import { readAttemptsFrom } from '../state/attempt-registry.js';
4
5
  import { listRunIds, runLastActiveMs, runsRoot } from '../state/run-namespace.js';
5
6
  import { inspectUrl } from './token.js';
@@ -24,36 +25,43 @@ export function inspectLinks(stateDir, secret, now = Date.now()) {
24
25
  .map((runId) => ({ runId, runDir: path.join(runsRoot(stateDir), runId) }))
25
26
  .sort((a, b) => runLastActiveMs(b.runDir) - runLastActiveMs(a.runDir));
26
27
  return runs.flatMap(({ runId, runDir }) => {
27
- const testingURL = readTestingUrl(path.join(runDir, 'meta.json'));
28
- if (undefined === testingURL) {
28
+ const target = readTestApiTarget(path.join(runDir, 'meta.json'));
29
+ if (undefined === target) {
29
30
  return [];
30
31
  }
31
- return readAttemptsFrom(path.join(runDir, 'attempts.jsonl'))
32
- .filter((attempt) => 'preflight' !== attempt.key)
32
+ const attemptsFile = path.join(runDir, 'attempts.jsonl');
33
+ const dropped = readDroppedTestIds(attemptsFile);
34
+ return readAttemptsFrom(attemptsFile)
35
+ .filter((attempt) => 'preflight' !== attempt.key && !dropped.has(attempt.testId))
33
36
  .map((attempt) => ({
34
37
  runId,
35
38
  key: attempt.key,
36
39
  name: attempt.name ?? attempt.key,
37
40
  testId: attempt.testId,
38
- url: inspectUrl(testingURL, secret, attempt.testId, now),
41
+ url: inspectUrl(target, secret, attempt.testId, now),
39
42
  }));
40
43
  });
41
44
  }
42
- /** Every run of a project records the same URL, so the newest one that has it wins. */
43
- export function recordedTestingUrl(stateDir) {
44
- return listRunIds(stateDir)
45
- .map((runId) => path.join(runsRoot(stateDir), runId))
46
- .sort((a, b) => runLastActiveMs(b) - runLastActiveMs(a))
47
- .map((runDir) => readTestingUrl(path.join(runDir, 'meta.json')))
48
- .find((url) => undefined !== url);
49
- }
50
- function readTestingUrl(metaFile) {
45
+ function readDroppedTestIds(attemptsFile) {
46
+ const dropped = new Set();
47
+ let lines;
51
48
  try {
52
- const meta = JSON.parse(fs.readFileSync(metaFile, 'utf-8'));
53
- return 'string' === typeof meta.testingURL ? meta.testingURL : undefined;
49
+ lines = fs.readFileSync(attemptsFile, 'utf-8').split('\n');
54
50
  }
55
51
  catch {
56
- return undefined;
52
+ return dropped;
53
+ }
54
+ for (const line of lines) {
55
+ try {
56
+ const record = JSON.parse(line);
57
+ if ('dropped' === record.type && 'string' === typeof record.testId) {
58
+ dropped.add(record.testId);
59
+ }
60
+ }
61
+ catch {
62
+ continue;
63
+ }
57
64
  }
65
+ return dropped;
58
66
  }
59
67
  //# sourceMappingURL=links.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/inspect/links.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/inspect/links.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- export declare function recordReplayTarget(stateDir: string, testingURL: string): void;
2
- export declare function replayTestingUrl(stateDir: string): string | undefined;
1
+ import { type TestApiTarget } from '../http/test-api.js';
2
+ export declare function recordReplayTarget(stateDir: string, target: TestApiTarget): void;
3
+ export declare function replayTarget(stateDir: string): TestApiTarget | undefined;
3
4
  //# sourceMappingURL=replay-target.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replay-target.d.ts","sourceRoot":"","sources":["../../src/inspect/replay-target.ts"],"names":[],"mappings":"AAQA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAG7E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUrE"}
1
+ {"version":3,"file":"replay-target.d.ts","sourceRoot":"","sources":["../../src/inspect/replay-target.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAO3E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAMhF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE"}
@@ -1,22 +1,15 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import { readTestApiTarget } from '../http/test-api.js';
3
4
  // Outside runs/: replay teardown removes its run directory.
4
5
  function targetFile(stateDir) {
5
6
  return path.join(stateDir, 'replay.json');
6
7
  }
7
- export function recordReplayTarget(stateDir, testingURL) {
8
+ export function recordReplayTarget(stateDir, target) {
8
9
  fs.mkdirSync(stateDir, { recursive: true });
9
- fs.writeFileSync(targetFile(stateDir), JSON.stringify({ testingURL }));
10
+ fs.writeFileSync(targetFile(stateDir), JSON.stringify({ testingURL: target.testingURL, backendPath: target.backendPath }));
10
11
  }
11
- export function replayTestingUrl(stateDir) {
12
- let testingURL;
13
- try {
14
- testingURL = JSON.parse(fs.readFileSync(targetFile(stateDir), 'utf-8'))
15
- .testingURL;
16
- }
17
- catch {
18
- return undefined;
19
- }
20
- return 'string' === typeof testingURL ? testingURL : undefined;
12
+ export function replayTarget(stateDir) {
13
+ return readTestApiTarget(targetFile(stateDir));
21
14
  }
22
15
  //# sourceMappingURL=replay-target.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"replay-target.js","sourceRoot":"","sources":["../../src/inspect/replay-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,4DAA4D;AAC5D,SAAS,UAAU,CAAC,QAAgB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAkB;IACnE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC7C,IAAI,UAAmB,CAAA;IACvB,IAAI,CAAC;QACD,UAAU,GAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAA8B;aAChG,UAAU,CAAA;IACnB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,OAAO,QAAQ,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"replay-target.js","sourceRoot":"","sources":["../../src/inspect/replay-target.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,4DAA4D;AAC5D,SAAS,UAAU,CAAC,QAAgB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,MAAqB;IACtE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,EAAE,CAAC,aAAa,CACZ,UAAU,CAAC,QAAQ,CAAC,EACpB,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,YAAY,CAAC,QAAgB;IACzC,OAAO,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;AAClD,CAAC"}
@@ -1,5 +1,6 @@
1
+ import { type TestApiTarget } from '../http/test-api.js';
1
2
  /** Long enough to pick a link from the list, short enough that a pasted one dies. */
2
3
  export declare const INSPECT_TOKEN_LIFETIME_MS = 900000;
3
4
  export declare function mintInspectToken(secret: string, testId: string, expiresAt: number): string;
4
- export declare function inspectUrl(testingURL: string, secret: string, testId: string, now: number): string;
5
+ export declare function inspectUrl(target: TestApiTarget, secret: string, testId: string, now: number): string;
5
6
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/inspect/token.ts"],"names":[],"mappings":"AAIA,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,SAAU,CAAA;AAEhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI1F;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQlG"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/inspect/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIpE,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,SAAU,CAAA;AAEhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI1F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOrG"}
@@ -1,4 +1,5 @@
1
1
  import { createHmac } from 'node:crypto';
2
+ import { testApiUrl } from '../http/test-api.js';
2
3
  const PURPOSE = 'inspect';
3
4
  /** Long enough to pick a link from the list, short enough that a pasted one dies. */
4
5
  export const INSPECT_TOKEN_LIFETIME_MS = 900_000;
@@ -6,10 +7,8 @@ export function mintInspectToken(secret, testId, expiresAt) {
6
7
  const signature = createHmac('sha256', secret).update(`${PURPOSE}:${testId}:${expiresAt}`).digest('hex');
7
8
  return `${expiresAt}.${signature}`;
8
9
  }
9
- export function inspectUrl(testingURL, secret, testId, now) {
10
+ export function inspectUrl(target, secret, testId, now) {
10
11
  const expiresAt = Math.floor((now + INSPECT_TOKEN_LIFETIME_MS) / 1000);
11
- return (`${testingURL}/typo3/test-api/inspect` +
12
- `?id=${encodeURIComponent(testId)}` +
13
- `&t=${encodeURIComponent(mintInspectToken(secret, testId, expiresAt))}`);
12
+ return testApiUrl(target, `inspect?id=${encodeURIComponent(testId)}&t=${encodeURIComponent(mintInspectToken(secret, testId, expiresAt))}`);
14
13
  }
15
14
  //# sourceMappingURL=token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/inspect/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,GAAG,SAAS,CAAA;AAEzB,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AAEhD,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,SAAiB;IAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAExG,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,GAAW;IACtF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,yBAAyB,CAAC,GAAG,IAAI,CAAC,CAAA;IAEtE,OAAO,CACH,GAAG,UAAU,yBAAyB;QACtC,OAAO,kBAAkB,CAAC,MAAM,CAAC,EAAE;QACnC,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAC1E,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/inspect/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAsB,MAAM,qBAAqB,CAAA;AAEpE,MAAM,OAAO,GAAG,SAAS,CAAA;AAEzB,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AAEhD,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,SAAiB;IAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAExG,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,MAAc,EAAE,MAAc,EAAE,GAAW;IACzF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,yBAAyB,CAAC,GAAG,IAAI,CAAC,CAAA;IAEtE,OAAO,UAAU,CACb,MAAM,EACN,cAAc,kBAAkB,CAAC,MAAM,CAAC,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAClH,CAAA;AACL,CAAC"}
@@ -1,9 +1,10 @@
1
- import { type APIRequestContext, type Browser, type Page, type TestInfo } from '@playwright/test';
1
+ import { type APIRequestContext, type Browser, type BrowserContextOptions, type Page, type TestInfo } from '@playwright/test';
2
2
  import { type ToolkitConfig } from './config.js';
3
3
  import { type ReplayFolder, type RequestContext } from './builders/request-context.js';
4
4
  import { type RecordToSave, type SavedRecord } from './http/record-edit.js';
5
5
  import { ContentBuilder, type QueuedContent } from './builders/content-builder.js';
6
6
  import { PageBuilder } from './builders/page-builder.js';
7
+ import { type ScenarioSite } from './sites/registry.js';
7
8
  type SetupFailureReporter = (config: ToolkitConfig, scenarioKey: string, testInfo: TestInfo, error: unknown) => Promise<never>;
8
9
  /** A failed setup throws out of ensureState, so it never reaches the fixture's end. */
9
10
  export declare function resolveSetupOutcome<T>(config: ToolkitConfig, scenarioKey: string, testInfo: TestInfo, run: () => Promise<T>, report?: SetupFailureReporter): Promise<T>;
@@ -33,9 +34,13 @@ export interface ScenarioFixtures<S> {
33
34
  state: S;
34
35
  testId: string;
35
36
  }
37
+ export interface ScenarioOptions {
38
+ site?: string;
39
+ }
36
40
  interface ResolvedScenario<S> {
37
41
  data: S;
38
42
  testId: string;
43
+ site: ScenarioSite;
39
44
  }
40
45
  /**
41
46
  * What the backend shows beside the site name, so whoever opens an inspect link
@@ -48,8 +53,9 @@ export declare function createScenarioFolder(page: Page, builderContext: Partial
48
53
  export declare function buildScenarioContext(page: Page, config: ToolkitConfig, session: {
49
54
  backendPath: string;
50
55
  routeToken: string;
51
- }, testId: string, name: string): Promise<Partial<RequestContext>>;
52
- export declare function openAuthenticatedPage(browser: Browser, config: ToolkitConfig, testId: string, name?: string): Promise<{
56
+ }, testId: string, name: string, site?: ScenarioSite): Promise<Partial<RequestContext>>;
57
+ export type ProjectContextOptions = Pick<BrowserContextOptions, 'ignoreHTTPSErrors' | 'httpCredentials' | 'proxy'>;
58
+ export declare function openAuthenticatedPage(browser: Browser, config: ToolkitConfig, testId: string, name?: string, site?: ScenarioSite, projectOptions?: ProjectContextOptions): Promise<{
53
59
  page: Page;
54
60
  routeToken: string;
55
61
  backendPath: string;
@@ -63,7 +69,7 @@ export declare function claimScenarioFile(file: string, owner: symbol): void;
63
69
  * One test file is one scenario: the first test that needs state runs the setup,
64
70
  * the rest wait for it or are skipped if it failed.
65
71
  */
66
- export declare function defineScenario<S = Record<string, never>>(setup?: (tools: SetupTools) => Promise<S>): import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & ScenarioFixtures<S> & {
72
+ export declare function defineScenario<S = Record<string, never>>(setup?: (tools: SetupTools) => Promise<S>, options?: ScenarioOptions): import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & ScenarioFixtures<S> & {
67
73
  resolvedScenario: ResolvedScenario<S>;
68
74
  automaticAccessibilityScan: void;
69
75
  }, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}