@vijaypjavvadi/pw-emit 1.1.0 → 1.3.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/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
_Nothing yet._
|
|
11
11
|
|
|
12
|
+
## [1.3.0] — 2026-05-22
|
|
13
|
+
|
|
14
|
+
### Added (consumed by `@vijaypjavvadi/bdd2pw@3.2.0`)
|
|
15
|
+
|
|
16
|
+
- `playwright.config.ts.tmpl` ends with a stable `// bdd2pw:config-end`
|
|
17
|
+
marker line followed by guidance comments. Downstream tooling can
|
|
18
|
+
splice additional code after that line without risking a duplicate
|
|
19
|
+
`defineConfig(...)` import or call. Addresses TestForge handoff
|
|
20
|
+
Issue 6.
|
|
21
|
+
- `EmitProjectOptions.dependencyStrategy?: "caret" | "exact"`. When set
|
|
22
|
+
to `"exact"`, the emitted `package.json` strips the leading `^` from
|
|
23
|
+
every devDependency version so the consuming project pins to exact
|
|
24
|
+
versions. Default `"caret"` matches existing behavior. Addresses
|
|
25
|
+
TestForge handoff Issue 9.
|
|
26
|
+
|
|
27
|
+
Both additions are additive and default-off — existing emission paths
|
|
28
|
+
are byte-stable across the 1.2 → 1.3 upgrade. SemVer minor.
|
|
29
|
+
|
|
30
|
+
## [1.2.0] — 2026-05-22
|
|
31
|
+
|
|
32
|
+
### Added (consumed by `@vijaypjavvadi/bdd2pw@3.1.0`)
|
|
33
|
+
|
|
34
|
+
- Every emitted `test(...)` / `test.fixme(...)` callback now receives
|
|
35
|
+
`testInfo` as the second argument:
|
|
36
|
+
`test("name", async ({ page }, testInfo) => {...})`.
|
|
37
|
+
Downstream tooling (visual-regression hooks, custom reporters,
|
|
38
|
+
artefact uploads) can now access `testInfo.titlePath`,
|
|
39
|
+
`testInfo.attach()`, `testInfo.testId` without post-processing.
|
|
40
|
+
TypeScript is fine with unused destructured params, so this is
|
|
41
|
+
zero-impact for consumers who don't reference testInfo. Addresses
|
|
42
|
+
TestForge handoff Issue 3.
|
|
43
|
+
|
|
12
44
|
## [1.1.0] — 2026-05-12
|
|
13
45
|
|
|
14
46
|
### Added (consumed by `@vijaypjavvadi/bdd2pw@3.0.0`)
|
package/dist/projectEmitter.d.ts
CHANGED
|
@@ -24,6 +24,14 @@ export interface EmitProjectOptions {
|
|
|
24
24
|
baseUrl?: string;
|
|
25
25
|
/** Injected as the `name` in `package.json`. */
|
|
26
26
|
projectName?: string;
|
|
27
|
+
/**
|
|
28
|
+
* v1.3.0 — how to render emitted devDependency versions. `caret`
|
|
29
|
+
* (default) emits `^1.45.0` style ranges — matches existing behavior.
|
|
30
|
+
* `exact` strips the leading `^` so the project pins to the exact
|
|
31
|
+
* version. Useful for teams that have been bitten by silent
|
|
32
|
+
* minor-version Playwright bumps in CI. See TestForge handoff Issue 9.
|
|
33
|
+
*/
|
|
34
|
+
dependencyStrategy?: "caret" | "exact";
|
|
27
35
|
}
|
|
28
36
|
export interface EmitProjectResult {
|
|
29
37
|
filesWritten: string[];
|
package/dist/projectEmitter.js
CHANGED
|
@@ -89,6 +89,14 @@ async function emitProject(opts) {
|
|
|
89
89
|
content = content
|
|
90
90
|
.replace(/\{\{projectName\}\}/g, projectName)
|
|
91
91
|
.replace(/\{\{baseUrl\}\}/g, baseUrl);
|
|
92
|
+
// v1.3.0 — pin emitted devDependency versions when requested.
|
|
93
|
+
// Only applied to package.json; other templates may legitimately
|
|
94
|
+
// use `^` for unrelated purposes (e.g. regex literals in
|
|
95
|
+
// playwright.config). Surgical string-replace inside the
|
|
96
|
+
// devDependencies block keeps the change auditable.
|
|
97
|
+
if (dest === "package.json" && opts.dependencyStrategy === "exact") {
|
|
98
|
+
content = content.replace(/("(?:@?[a-zA-Z0-9/_-]+)"\s*:\s*)"\^([^"]+)"/g, '$1"$2"');
|
|
99
|
+
}
|
|
92
100
|
await fs.writeFile(destPath, content, "utf8");
|
|
93
101
|
filesWritten.push(destPath);
|
|
94
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectEmitter.js","sourceRoot":"","sources":["../src/projectEmitter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"projectEmitter.js","sourceRoot":"","sources":["../src/projectEmitter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCH,kCAwDC;AA5FD,6CAA+B;AAC/B,2CAA6B;AA0B7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAErE,MAAM,gBAAgB,GAAiD;IACrE,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE;IAClD,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAClE,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE;IACpD,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,EAAE;CAC9C,CAAC;AAEK,KAAK,UAAU,WAAW,CAAC,IAAwB;IACxD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,uBAAuB,CAAC;IAExD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE9C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,uBAAuB,OAAO,eAAe,IAAI,EAAE;aAC7D,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,IAAI,mCAAmC;aACpD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,GAAG,OAAO;aACd,OAAO,CAAC,sBAAsB,EAAE,WAAW,CAAC;aAC5C,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACxC,8DAA8D;QAC9D,iEAAiE;QACjE,yDAAyD;QACzD,yDAAyD;QACzD,oDAAoD;QACpD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,kBAAkB,KAAK,OAAO,EAAE,CAAC;YACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,8CAA8C,EAC9C,QAAQ,CACT,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/testEmitter.js
CHANGED
|
@@ -74,12 +74,17 @@ function emitTestSpec(ir) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
const fixtures = (t.fixtures && t.fixtures.length ? t.fixtures : ["page"]).join(", ");
|
|
77
|
+
// v1.2.0 — every test signature receives `testInfo` as the second
|
|
78
|
+
// argument. TypeScript is fine with unused destructured params, and
|
|
79
|
+
// downstream tooling (visual-regression hooks, custom reporters,
|
|
80
|
+
// artefact uploads) now has access to testInfo.titlePath /
|
|
81
|
+
// testInfo.attach() / testInfo.testId without post-processing.
|
|
77
82
|
if (t.fixme) {
|
|
78
|
-
lines.push(` test.fixme(${JSON.stringify(t.name)}, async ({ ${fixtures} }) => {`);
|
|
83
|
+
lines.push(` test.fixme(${JSON.stringify(t.name)}, async ({ ${fixtures} }, testInfo) => {`);
|
|
79
84
|
lines.push(` // FIXME: ${t.fixme}`);
|
|
80
85
|
}
|
|
81
86
|
else {
|
|
82
|
-
lines.push(` test(${JSON.stringify(t.name)}, async ({ ${fixtures} }) => {`);
|
|
87
|
+
lines.push(` test(${JSON.stringify(t.name)}, async ({ ${fixtures} }, testInfo) => {`);
|
|
83
88
|
}
|
|
84
89
|
if (t.body && t.body.trim()) {
|
|
85
90
|
lines.push((0, indent_1.dedentAndIndent)(t.body, " "));
|
package/dist/testEmitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testEmitter.js","sourceRoot":"","sources":["../src/testEmitter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;AAKH,
|
|
1
|
+
{"version":3,"file":"testEmitter.js","sourceRoot":"","sources":["../src/testEmitter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vijaypjavvadi/pw-emit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Shared emitter library that renders Playwright TypeScript Page Objects, spec files, and project scaffolds from a generic IR. Powers both @vijaypjavvadi/sel2pw and @vijaypjavvadi/bdd2pw.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,3 +22,10 @@ export default defineConfig({
|
|
|
22
22
|
{ name: "webkit", use: { ...devices["Desktop Safari"] } },
|
|
23
23
|
],
|
|
24
24
|
});
|
|
25
|
+
// bdd2pw:config-end
|
|
26
|
+
//
|
|
27
|
+
// Downstream tooling can safely splice additional code AFTER the line
|
|
28
|
+
// above (e.g. extra projects, custom reporters, post-process plugins).
|
|
29
|
+
// Do not duplicate the `defineConfig(...)` import or call — append a
|
|
30
|
+
// `mergeConfig(...)` overlay or a `Object.assign(exports.default, ...)`
|
|
31
|
+
// helper instead. See TestForge handoff Issue 6 (bdd2pw v3.2.0).
|