document360-capture 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth.js +21 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/capture.js +2 -1
- package/dist/commands/capture.js.map +1 -1
- package/dist/runner/playwrightConfig.d.ts +5 -1
- package/dist/runner/playwrightConfig.js +40 -2
- package/dist/runner/playwrightConfig.js.map +1 -1
- package/dist/runner/runSpecs.d.ts +1 -0
- package/dist/runner/runSpecs.js +28 -4
- package/dist/runner/runSpecs.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/auth.js
CHANGED
|
@@ -23,11 +23,30 @@ export async function authCommand(opts) {
|
|
|
23
23
|
console.log(' terminal and press ENTER to save the session.');
|
|
24
24
|
console.log('────────────────────────────────────────────────────────────');
|
|
25
25
|
console.log('');
|
|
26
|
+
const boundary = new RegExp(env.authBoundaryUrlPattern);
|
|
27
|
+
// Crash-protection autosave — but only once the browser is past the login
|
|
28
|
+
// boundary. Saving mid-login persists a half-baked state (context cookies,
|
|
29
|
+
// no session cookie) that later fails captures while `doctor` reports it
|
|
30
|
+
// as present.
|
|
26
31
|
const safetyInterval = setInterval(() => {
|
|
27
|
-
|
|
32
|
+
if (boundary.test(page.url())) {
|
|
33
|
+
void context.storageState({ path: savePath }).catch(() => { });
|
|
34
|
+
}
|
|
28
35
|
}, 30_000);
|
|
29
36
|
try {
|
|
30
|
-
|
|
37
|
+
// Refuse to save until the page is back inside the app — pressing ENTER
|
|
38
|
+
// on the identity provider's login page must not persist a broken state.
|
|
39
|
+
for (;;) {
|
|
40
|
+
await waitForEnter();
|
|
41
|
+
const url = page.url();
|
|
42
|
+
if (boundary.test(url))
|
|
43
|
+
break;
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(`✗ Login doesn't look complete yet — the browser is still at:`);
|
|
46
|
+
console.log(` ${url}`);
|
|
47
|
+
console.log(' Finish logging in until you can see the app, then press ENTER again.');
|
|
48
|
+
console.log(' (Ctrl+C aborts without saving.)');
|
|
49
|
+
}
|
|
31
50
|
await context.storageState({ path: savePath });
|
|
32
51
|
console.log('');
|
|
33
52
|
console.log(`✓ Session saved to ${savePath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM3E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,mBAAmB,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,KAAK,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/capture.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function captureCommand(specId, opts) {
|
|
|
24
24
|
console.error(' Generate at least one spec there before running capture.');
|
|
25
25
|
return 2;
|
|
26
26
|
}
|
|
27
|
-
const configPath = writeRuntimePlaywrightConfig({
|
|
27
|
+
const { configPath, tsconfigPath } = writeRuntimePlaywrightConfig({
|
|
28
28
|
cwd,
|
|
29
29
|
cfg,
|
|
30
30
|
envName,
|
|
@@ -40,6 +40,7 @@ export async function captureCommand(specId, opts) {
|
|
|
40
40
|
const result = await runSpecs({
|
|
41
41
|
cwd,
|
|
42
42
|
configPath,
|
|
43
|
+
tsconfigPath,
|
|
43
44
|
startUrl: env.startUrl,
|
|
44
45
|
authBoundaryUrlPattern: env.authBoundaryUrlPattern,
|
|
45
46
|
specId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA0B,EAAE,IAAoB;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACjG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA0B,EAAE,IAAoB;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACjG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,4BAA4B,CAAC;QAChE,GAAG;QACH,GAAG;QACH,OAAO;QACP,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;KACxD,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpE,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;;QAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,GAAG;QACH,UAAU;QACV,YAAY;QACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,sBAAsB,EAAE,GAAG,CAAC,sBAAsB;QAClD,MAAM;QACN,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACtD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,yCAAyC,OAAO,IAAI,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;IACnE,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;IAErH,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,sBAAsB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACvF,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -5,4 +5,8 @@ export type RuntimeConfigArgs = {
|
|
|
5
5
|
envName: string;
|
|
6
6
|
storageStatePath: string;
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type RuntimeConfigPaths = {
|
|
9
|
+
configPath: string;
|
|
10
|
+
tsconfigPath: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function writeRuntimePlaywrightConfig(args: RuntimeConfigArgs): RuntimeConfigPaths;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { join, isAbsolute, resolve } from 'node:path';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
3
5
|
export function writeRuntimePlaywrightConfig(args) {
|
|
4
6
|
const { cwd, cfg, envName, storageStatePath } = args;
|
|
5
7
|
const cacheDir = join(cwd, '.d360-capture-cache');
|
|
@@ -8,8 +10,13 @@ export function writeRuntimePlaywrightConfig(args) {
|
|
|
8
10
|
const path = join(cacheDir, `playwright.${envName}.config.cjs`);
|
|
9
11
|
const captureDirAbs = isAbsolute(cfg.captureDir) ? cfg.captureDir : resolve(cwd, cfg.captureDir);
|
|
10
12
|
const storageAbs = isAbsolute(storageStatePath) ? storageStatePath : resolve(cwd, storageStatePath);
|
|
13
|
+
// The generated config lives in the CONSUMING repo, which typically does
|
|
14
|
+
// not have @playwright/test in its node_modules (the CLI is installed
|
|
15
|
+
// globally). Resolve it from the CLI's own dependency tree at generation
|
|
16
|
+
// time and require it by absolute path.
|
|
17
|
+
const playwrightTestPath = require.resolve('@playwright/test');
|
|
11
18
|
const body = `// Generated by document360-capture — do not edit by hand.
|
|
12
|
-
const { defineConfig } = require(
|
|
19
|
+
const { defineConfig } = require(${JSON.stringify(playwrightTestPath)});
|
|
13
20
|
module.exports = defineConfig({
|
|
14
21
|
testDir: ${JSON.stringify(captureDirAbs)},
|
|
15
22
|
testMatch: '**/*.spec.ts',
|
|
@@ -28,6 +35,37 @@ module.exports = defineConfig({
|
|
|
28
35
|
});
|
|
29
36
|
`;
|
|
30
37
|
writeFileSync(path, body, 'utf8');
|
|
31
|
-
|
|
38
|
+
// Spec files import '@playwright/test' and 'document360-capture/helpers'
|
|
39
|
+
// by bare specifier, but the consuming repo usually has neither in its
|
|
40
|
+
// node_modules (the CLI is installed globally) — and Playwright's ESM
|
|
41
|
+
// loader ignores NODE_PATH. Generate a tsconfig with absolute path
|
|
42
|
+
// mappings into the CLI's own dependency tree; runSpecs passes it via
|
|
43
|
+
// `playwright test --tsconfig`, whose mappings Playwright applies when
|
|
44
|
+
// transpiling spec imports.
|
|
45
|
+
const tsconfigPath = join(cacheDir, `tsconfig.${envName}.json`);
|
|
46
|
+
const toSlash = (p) => p.replace(/\\/g, '/');
|
|
47
|
+
// Self-reference resolution (Node >= 12.16): inside the package, its own
|
|
48
|
+
// name resolves through its exports map — works for global installs,
|
|
49
|
+
// npm link, and the dev monorepo alike.
|
|
50
|
+
const helpersPath = require.resolve('document360-capture/helpers');
|
|
51
|
+
// When specs are loaded as ESM (consuming repo has "type": "module"),
|
|
52
|
+
// mapping '@playwright/test' to its CJS index.js breaks named imports
|
|
53
|
+
// (cjs-module-lexer can't see the re-exported names). Prefer the ESM
|
|
54
|
+
// wrapper (index.mjs, ships with every modern @playwright/test) and fall
|
|
55
|
+
// back to the CJS entry for old versions.
|
|
56
|
+
const playwrightTestDir = join(require.resolve('@playwright/test/package.json'), '..');
|
|
57
|
+
const playwrightTestMjs = join(playwrightTestDir, 'index.mjs');
|
|
58
|
+
const playwrightTestImport = existsSync(playwrightTestMjs) ? playwrightTestMjs : playwrightTestPath;
|
|
59
|
+
const tsconfig = {
|
|
60
|
+
compilerOptions: {
|
|
61
|
+
baseUrl: '.',
|
|
62
|
+
paths: {
|
|
63
|
+
'document360-capture/helpers': [toSlash(helpersPath)],
|
|
64
|
+
'@playwright/test': [toSlash(playwrightTestImport)],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2), 'utf8');
|
|
69
|
+
return { configPath: path, tsconfigPath };
|
|
32
70
|
}
|
|
33
71
|
//# sourceMappingURL=playwrightConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwrightConfig.js","sourceRoot":"","sources":["../../src/runner/playwrightConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"playwrightConfig.js","sourceRoot":"","sources":["../../src/runner/playwrightConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGtD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAc/C,MAAM,UAAU,4BAA4B,CAAC,IAAuB;IAClE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACjG,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAEpG,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,wCAAwC;IACxC,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAG;mCACoB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;;aAExD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;;;;;;;;gBAQ1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACxB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;;;;;CAM7C,CAAC;IAEA,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElC,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,mEAAmE;IACnE,sEAAsE;IACtE,uEAAuE;IACvE,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,OAAO,OAAO,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,yEAAyE;IACzE,qEAAqE;IACrE,wCAAwC;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,qEAAqE;IACrE,yEAAyE;IACzE,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,CAAC;IACvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACpG,MAAM,QAAQ,GAAG;QACf,eAAe,EAAE;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE;gBACL,6BAA6B,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACrD,kBAAkB,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;aACpD;SACF;KACF,CAAC;IACF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/runner/runSpecs.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import {
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { delimiter, dirname, join, resolve as resolvePath } from 'node:path';
|
|
4
5
|
const require = createRequire(import.meta.url);
|
|
5
6
|
export async function runSpecs(args) {
|
|
6
|
-
const { cwd, configPath, startUrl, authBoundaryUrlPattern, specId, captureDirAbs } = args;
|
|
7
|
+
const { cwd, configPath, tsconfigPath, startUrl, authBoundaryUrlPattern, specId, captureDirAbs } = args;
|
|
7
8
|
const cliPath = resolvePlaywrightCli();
|
|
8
9
|
if (!cliPath) {
|
|
9
10
|
return {
|
|
@@ -12,9 +13,12 @@ export async function runSpecs(args) {
|
|
|
12
13
|
stderr: 'Cannot locate @playwright/test CLI. Try: npm install -g document360-capture (reinstall)',
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
|
-
const cliArgs = [cliPath, 'test', '--config', configPath];
|
|
16
|
+
const cliArgs = [cliPath, 'test', '--config', configPath, '--tsconfig', tsconfigPath];
|
|
17
|
+
// Playwright treats positional args as REGEXES matched against test file
|
|
18
|
+
// paths — a Windows absolute path (backslashes) never matches. Pass the
|
|
19
|
+
// regex-escaped filename instead; testDir scoping makes it unambiguous.
|
|
16
20
|
if (specId)
|
|
17
|
-
cliArgs.push(
|
|
21
|
+
cliArgs.push(escapeRegex(`${specId}.spec.ts`));
|
|
18
22
|
return new Promise(resolve => {
|
|
19
23
|
let stdout = '';
|
|
20
24
|
let stderr = '';
|
|
@@ -24,6 +28,12 @@ export async function runSpecs(args) {
|
|
|
24
28
|
...process.env,
|
|
25
29
|
CAPTURE_START_URL: startUrl,
|
|
26
30
|
CAPTURE_AUTH_BOUNDARY: authBoundaryUrlPattern,
|
|
31
|
+
// Spec files import 'document360-capture/helpers' by package name,
|
|
32
|
+
// but the consuming repo usually doesn't have the package in its
|
|
33
|
+
// local node_modules (the CLI is installed globally). NODE_PATH
|
|
34
|
+
// makes bare specifiers fall back to the CLI's own install
|
|
35
|
+
// locations after the normal node_modules walk-up.
|
|
36
|
+
NODE_PATH: buildNodePath(),
|
|
27
37
|
},
|
|
28
38
|
shell: false,
|
|
29
39
|
});
|
|
@@ -46,6 +56,20 @@ export async function runSpecs(args) {
|
|
|
46
56
|
});
|
|
47
57
|
});
|
|
48
58
|
}
|
|
59
|
+
function escapeRegex(s) {
|
|
60
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
61
|
+
}
|
|
62
|
+
function buildNodePath() {
|
|
63
|
+
// dist/runner/runSpecs.js → package root is two levels up.
|
|
64
|
+
const packageRoot = resolvePath(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
65
|
+
const entries = [
|
|
66
|
+
join(packageRoot, 'node_modules'), // the CLI's own deps (@playwright/test, sharp, …)
|
|
67
|
+
dirname(packageRoot), // the node_modules dir CONTAINING the CLI → resolves 'document360-capture/helpers'
|
|
68
|
+
];
|
|
69
|
+
if (process.env.NODE_PATH)
|
|
70
|
+
entries.push(process.env.NODE_PATH);
|
|
71
|
+
return entries.join(delimiter);
|
|
72
|
+
}
|
|
49
73
|
function resolvePlaywrightCli() {
|
|
50
74
|
// Newer @playwright/test versions (>= ~1.50) export './cli' in their
|
|
51
75
|
// exports map and block deep './cli.js' resolution; older versions only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runSpecs.js","sourceRoot":"","sources":["../../src/runner/runSpecs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runSpecs.js","sourceRoot":"","sources":["../../src/runner/runSpecs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED