@vijaypjavvadi/bdd2pw 1.0.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 +308 -0
- package/LICENSE +21 -0
- package/README.md +254 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +176 -0
- package/dist/cli.js.map +1 -0
- package/dist/discovery/mcpClient.d.ts +53 -0
- package/dist/discovery/mcpClient.js +326 -0
- package/dist/discovery/mcpClient.js.map +1 -0
- package/dist/discovery/snapshotParser.d.ts +13 -0
- package/dist/discovery/snapshotParser.js +51 -0
- package/dist/discovery/snapshotParser.js.map +1 -0
- package/dist/emitters/facade.d.ts +52 -0
- package/dist/emitters/facade.js +125 -0
- package/dist/emitters/facade.js.map +1 -0
- package/dist/http/artifacts.d.ts +14 -0
- package/dist/http/artifacts.js +36 -0
- package/dist/http/artifacts.js.map +1 -0
- package/dist/http/jobs.d.ts +26 -0
- package/dist/http/jobs.js +59 -0
- package/dist/http/jobs.js.map +1 -0
- package/dist/http/routes.d.ts +11 -0
- package/dist/http/routes.js +267 -0
- package/dist/http/routes.js.map +1 -0
- package/dist/http/schemas.d.ts +167 -0
- package/dist/http/schemas.js +57 -0
- package/dist/http/schemas.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.js +507 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/governanceClient.d.ts +24 -0
- package/dist/llm/governanceClient.js +22 -0
- package/dist/llm/governanceClient.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +8 -0
- package/dist/llm/providers/anthropic.js +12 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +5 -0
- package/dist/llm/providers/gemini.js +9 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +5 -0
- package/dist/llm/providers/openai.js +9 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/parser/gherkinParser.d.ts +17 -0
- package/dist/parser/gherkinParser.js +143 -0
- package/dist/parser/gherkinParser.js.map +1 -0
- package/dist/repo/projectScaffolder.d.ts +24 -0
- package/dist/repo/projectScaffolder.js +64 -0
- package/dist/repo/projectScaffolder.js.map +1 -0
- package/dist/repo/repoScanner.d.ts +21 -0
- package/dist/repo/repoScanner.js +132 -0
- package/dist/repo/repoScanner.js.map +1 -0
- package/dist/reports/reviewReport.d.ts +19 -0
- package/dist/reports/reviewReport.js +96 -0
- package/dist/reports/reviewReport.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.js +40 -0
- package/dist/server.js.map +1 -0
- package/dist/transformers/locatorPicker.d.ts +40 -0
- package/dist/transformers/locatorPicker.js +283 -0
- package/dist/transformers/locatorPicker.js.map +1 -0
- package/dist/transformers/pomResolver.d.ts +28 -0
- package/dist/transformers/pomResolver.js +35 -0
- package/dist/transformers/pomResolver.js.map +1 -0
- package/dist/transformers/stepMatcher.d.ts +36 -0
- package/dist/transformers/stepMatcher.js +461 -0
- package/dist/transformers/stepMatcher.js.map +1 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/naming.d.ts +23 -0
- package/dist/utils/naming.js +58 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/validate/tscRunner.d.ts +17 -0
- package/dist/validate/tscRunner.js +98 -0
- package/dist/validate/tscRunner.js.map +1 -0
- package/package.json +69 -0
- package/templates/gitignore.tmpl +10 -0
- package/templates/package.json.tmpl +16 -0
- package/templates/playwright.config.ts.tmpl +24 -0
- package/templates/tsconfig.json.tmpl +15 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod request/response validators for the HTTP API.
|
|
3
|
+
* See docs/SCOPE.md §8b and docs/ARCHITECTURE.md §6.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
export declare const ScaffoldRequestSchema: z.ZodObject<{
|
|
7
|
+
feature: z.ZodString;
|
|
8
|
+
url: z.ZodString;
|
|
9
|
+
page: z.ZodString;
|
|
10
|
+
repo: z.ZodString;
|
|
11
|
+
options: z.ZodOptional<z.ZodObject<{
|
|
12
|
+
pages: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
13
|
+
storageState: z.ZodOptional<z.ZodString>;
|
|
14
|
+
headed: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
llm: z.ZodOptional<z.ZodEnum<["anthropic", "openai", "gemini"]>>;
|
|
16
|
+
governanceUrl: z.ZodOptional<z.ZodString>;
|
|
17
|
+
templates: z.ZodOptional<z.ZodString>;
|
|
18
|
+
telemetry: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
noValidate: z.ZodOptional<z.ZodBoolean>;
|
|
20
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
pages?: string[] | undefined;
|
|
23
|
+
storageState?: string | undefined;
|
|
24
|
+
headed?: boolean | undefined;
|
|
25
|
+
llm?: "anthropic" | "openai" | "gemini" | undefined;
|
|
26
|
+
governanceUrl?: string | undefined;
|
|
27
|
+
templates?: string | undefined;
|
|
28
|
+
telemetry?: boolean | undefined;
|
|
29
|
+
noValidate?: boolean | undefined;
|
|
30
|
+
force?: boolean | undefined;
|
|
31
|
+
}, {
|
|
32
|
+
pages?: string[] | undefined;
|
|
33
|
+
storageState?: string | undefined;
|
|
34
|
+
headed?: boolean | undefined;
|
|
35
|
+
llm?: "anthropic" | "openai" | "gemini" | undefined;
|
|
36
|
+
governanceUrl?: string | undefined;
|
|
37
|
+
templates?: string | undefined;
|
|
38
|
+
telemetry?: boolean | undefined;
|
|
39
|
+
noValidate?: boolean | undefined;
|
|
40
|
+
force?: boolean | undefined;
|
|
41
|
+
}>>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
url: string;
|
|
44
|
+
page: string;
|
|
45
|
+
feature: string;
|
|
46
|
+
repo: string;
|
|
47
|
+
options?: {
|
|
48
|
+
pages?: string[] | undefined;
|
|
49
|
+
storageState?: string | undefined;
|
|
50
|
+
headed?: boolean | undefined;
|
|
51
|
+
llm?: "anthropic" | "openai" | "gemini" | undefined;
|
|
52
|
+
governanceUrl?: string | undefined;
|
|
53
|
+
templates?: string | undefined;
|
|
54
|
+
telemetry?: boolean | undefined;
|
|
55
|
+
noValidate?: boolean | undefined;
|
|
56
|
+
force?: boolean | undefined;
|
|
57
|
+
} | undefined;
|
|
58
|
+
}, {
|
|
59
|
+
url: string;
|
|
60
|
+
page: string;
|
|
61
|
+
feature: string;
|
|
62
|
+
repo: string;
|
|
63
|
+
options?: {
|
|
64
|
+
pages?: string[] | undefined;
|
|
65
|
+
storageState?: string | undefined;
|
|
66
|
+
headed?: boolean | undefined;
|
|
67
|
+
llm?: "anthropic" | "openai" | "gemini" | undefined;
|
|
68
|
+
governanceUrl?: string | undefined;
|
|
69
|
+
templates?: string | undefined;
|
|
70
|
+
telemetry?: boolean | undefined;
|
|
71
|
+
noValidate?: boolean | undefined;
|
|
72
|
+
force?: boolean | undefined;
|
|
73
|
+
} | undefined;
|
|
74
|
+
}>;
|
|
75
|
+
export type ScaffoldRequest = z.infer<typeof ScaffoldRequestSchema>;
|
|
76
|
+
export declare const AnalyzeRequestSchema: z.ZodObject<{
|
|
77
|
+
feature: z.ZodString;
|
|
78
|
+
url: z.ZodString;
|
|
79
|
+
options: z.ZodOptional<z.ZodObject<{
|
|
80
|
+
storageState: z.ZodOptional<z.ZodString>;
|
|
81
|
+
headed: z.ZodOptional<z.ZodBoolean>;
|
|
82
|
+
}, "strip", z.ZodTypeAny, {
|
|
83
|
+
storageState?: string | undefined;
|
|
84
|
+
headed?: boolean | undefined;
|
|
85
|
+
}, {
|
|
86
|
+
storageState?: string | undefined;
|
|
87
|
+
headed?: boolean | undefined;
|
|
88
|
+
}>>;
|
|
89
|
+
}, "strip", z.ZodTypeAny, {
|
|
90
|
+
url: string;
|
|
91
|
+
feature: string;
|
|
92
|
+
options?: {
|
|
93
|
+
storageState?: string | undefined;
|
|
94
|
+
headed?: boolean | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
}, {
|
|
97
|
+
url: string;
|
|
98
|
+
feature: string;
|
|
99
|
+
options?: {
|
|
100
|
+
storageState?: string | undefined;
|
|
101
|
+
headed?: boolean | undefined;
|
|
102
|
+
} | undefined;
|
|
103
|
+
}>;
|
|
104
|
+
export type AnalyzeRequest = z.infer<typeof AnalyzeRequestSchema>;
|
|
105
|
+
export declare const UpdatePomRequestSchema: z.ZodObject<{
|
|
106
|
+
page: z.ZodString;
|
|
107
|
+
url: z.ZodString;
|
|
108
|
+
repo: z.ZodString;
|
|
109
|
+
options: z.ZodOptional<z.ZodObject<{
|
|
110
|
+
storageState: z.ZodOptional<z.ZodString>;
|
|
111
|
+
headed: z.ZodOptional<z.ZodBoolean>;
|
|
112
|
+
templates: z.ZodOptional<z.ZodString>;
|
|
113
|
+
}, "strip", z.ZodTypeAny, {
|
|
114
|
+
storageState?: string | undefined;
|
|
115
|
+
headed?: boolean | undefined;
|
|
116
|
+
templates?: string | undefined;
|
|
117
|
+
}, {
|
|
118
|
+
storageState?: string | undefined;
|
|
119
|
+
headed?: boolean | undefined;
|
|
120
|
+
templates?: string | undefined;
|
|
121
|
+
}>>;
|
|
122
|
+
}, "strip", z.ZodTypeAny, {
|
|
123
|
+
url: string;
|
|
124
|
+
page: string;
|
|
125
|
+
repo: string;
|
|
126
|
+
options?: {
|
|
127
|
+
storageState?: string | undefined;
|
|
128
|
+
headed?: boolean | undefined;
|
|
129
|
+
templates?: string | undefined;
|
|
130
|
+
} | undefined;
|
|
131
|
+
}, {
|
|
132
|
+
url: string;
|
|
133
|
+
page: string;
|
|
134
|
+
repo: string;
|
|
135
|
+
options?: {
|
|
136
|
+
storageState?: string | undefined;
|
|
137
|
+
headed?: boolean | undefined;
|
|
138
|
+
templates?: string | undefined;
|
|
139
|
+
} | undefined;
|
|
140
|
+
}>;
|
|
141
|
+
export type UpdatePomRequest = z.infer<typeof UpdatePomRequestSchema>;
|
|
142
|
+
export declare const JobAcceptedSchema: z.ZodObject<{
|
|
143
|
+
jobId: z.ZodString;
|
|
144
|
+
links: z.ZodObject<{
|
|
145
|
+
self: z.ZodString;
|
|
146
|
+
artifact: z.ZodString;
|
|
147
|
+
}, "strip", z.ZodTypeAny, {
|
|
148
|
+
self: string;
|
|
149
|
+
artifact: string;
|
|
150
|
+
}, {
|
|
151
|
+
self: string;
|
|
152
|
+
artifact: string;
|
|
153
|
+
}>;
|
|
154
|
+
}, "strip", z.ZodTypeAny, {
|
|
155
|
+
jobId: string;
|
|
156
|
+
links: {
|
|
157
|
+
self: string;
|
|
158
|
+
artifact: string;
|
|
159
|
+
};
|
|
160
|
+
}, {
|
|
161
|
+
jobId: string;
|
|
162
|
+
links: {
|
|
163
|
+
self: string;
|
|
164
|
+
artifact: string;
|
|
165
|
+
};
|
|
166
|
+
}>;
|
|
167
|
+
export type JobAccepted = z.infer<typeof JobAcceptedSchema>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Zod request/response validators for the HTTP API.
|
|
4
|
+
* See docs/SCOPE.md §8b and docs/ARCHITECTURE.md §6.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.JobAcceptedSchema = exports.UpdatePomRequestSchema = exports.AnalyzeRequestSchema = exports.ScaffoldRequestSchema = void 0;
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
exports.ScaffoldRequestSchema = zod_1.z.object({
|
|
10
|
+
feature: zod_1.z.string().min(1),
|
|
11
|
+
url: zod_1.z.string().url(),
|
|
12
|
+
page: zod_1.z.string().min(1),
|
|
13
|
+
repo: zod_1.z.string().min(1),
|
|
14
|
+
options: zod_1.z
|
|
15
|
+
.object({
|
|
16
|
+
pages: zod_1.z.array(zod_1.z.string()).optional(),
|
|
17
|
+
storageState: zod_1.z.string().optional(),
|
|
18
|
+
headed: zod_1.z.boolean().optional(),
|
|
19
|
+
llm: zod_1.z.enum(["anthropic", "openai", "gemini"]).optional(),
|
|
20
|
+
governanceUrl: zod_1.z.string().url().optional(),
|
|
21
|
+
templates: zod_1.z.string().optional(),
|
|
22
|
+
telemetry: zod_1.z.boolean().optional(),
|
|
23
|
+
noValidate: zod_1.z.boolean().optional(),
|
|
24
|
+
force: zod_1.z.boolean().optional(),
|
|
25
|
+
})
|
|
26
|
+
.optional(),
|
|
27
|
+
});
|
|
28
|
+
exports.AnalyzeRequestSchema = zod_1.z.object({
|
|
29
|
+
feature: zod_1.z.string().min(1),
|
|
30
|
+
url: zod_1.z.string().url(),
|
|
31
|
+
options: zod_1.z
|
|
32
|
+
.object({
|
|
33
|
+
storageState: zod_1.z.string().optional(),
|
|
34
|
+
headed: zod_1.z.boolean().optional(),
|
|
35
|
+
})
|
|
36
|
+
.optional(),
|
|
37
|
+
});
|
|
38
|
+
exports.UpdatePomRequestSchema = zod_1.z.object({
|
|
39
|
+
page: zod_1.z.string().min(1),
|
|
40
|
+
url: zod_1.z.string().url(),
|
|
41
|
+
repo: zod_1.z.string().min(1),
|
|
42
|
+
options: zod_1.z
|
|
43
|
+
.object({
|
|
44
|
+
storageState: zod_1.z.string().optional(),
|
|
45
|
+
headed: zod_1.z.boolean().optional(),
|
|
46
|
+
templates: zod_1.z.string().optional(),
|
|
47
|
+
})
|
|
48
|
+
.optional(),
|
|
49
|
+
});
|
|
50
|
+
exports.JobAcceptedSchema = zod_1.z.object({
|
|
51
|
+
jobId: zod_1.z.string(),
|
|
52
|
+
links: zod_1.z.object({
|
|
53
|
+
self: zod_1.z.string(),
|
|
54
|
+
artifact: zod_1.z.string(),
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/http/schemas.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6BAAwB;AAEX,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAC;SACP,MAAM,CAAC;QACN,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACrC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC9B,GAAG,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzD,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC1C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,OAAO,EAAE,OAAC;SACP,MAAM,CAAC;QACN,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIU,QAAA,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAC;SACP,MAAM,CAAC;QACN,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC9B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIU,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC;CACH,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public programmatic API for `@vijaypjavvadi/bdd2pw`.
|
|
3
|
+
*
|
|
4
|
+
* The CLI (`src/cli.ts`) and HTTP service (`src/server.ts`) are thin shells
|
|
5
|
+
* over these three functions. See docs/ARCHITECTURE.md §1.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnalyzeOptions, AnalyzeResult, ScaffoldOptions, ScaffoldResult, UpdatePomOptions, UpdatePomResult } from "./types";
|
|
8
|
+
export type { AnalyzeOptions, AnalyzeResult, ScaffoldOptions, ScaffoldResult, UpdatePomOptions, UpdatePomResult, FeatureIR, ScenarioIR, StepIR, ElementIR, LocatorChoice, PageObjectIR, PomMethodIR, StepBinding, ReviewItem, } from "./types";
|
|
9
|
+
/**
|
|
10
|
+
* Scaffold a Playwright TS test repo from a Gherkin .feature file.
|
|
11
|
+
*
|
|
12
|
+
* Pipeline (see docs/ARCHITECTURE.md §2):
|
|
13
|
+
* gherkin parse → repo scan → POM resolve → MCP discover →
|
|
14
|
+
* locator pick → step match → emit → tsc validate → review report.
|
|
15
|
+
*
|
|
16
|
+
* Phase 1a: MCP page discovery uses the file-snapshot fallback. Pass
|
|
17
|
+
* `opts.snapshotFile` to bypass the (not-yet-implemented) real browser
|
|
18
|
+
* scan. Real `@playwright/mcp` integration lands in Phase 1b.
|
|
19
|
+
*/
|
|
20
|
+
export declare function scaffold(opts: ScaffoldOptions): Promise<ScaffoldResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Dry-run analyser. Parses the .feature, scans the URL (or snapshot file),
|
|
23
|
+
* picks locators, matches steps — but writes nothing.
|
|
24
|
+
*/
|
|
25
|
+
export declare function analyze(opts: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Re-scan a URL and merge any newly-discovered locators into an existing
|
|
28
|
+
* Page Object. **Append-only by construction:**
|
|
29
|
+
*
|
|
30
|
+
* - Never deletes any property, method, or import.
|
|
31
|
+
* - Never renames anything.
|
|
32
|
+
* - Never modifies any existing method body — hand-edits are preserved
|
|
33
|
+
* byte-identical.
|
|
34
|
+
* - Skips field-name collisions (existing field wins).
|
|
35
|
+
* - Adds new locator fields + their constructor assignments only.
|
|
36
|
+
* - Method synthesis is opt-in and deferred to v1.1.
|
|
37
|
+
*
|
|
38
|
+
* Implementation: AST surgery via `ts-morph`. We read the existing file,
|
|
39
|
+
* compute a diff against the freshly-scanned IR, and use `ts-morph`'s
|
|
40
|
+
* `addProperty` / `addStatements` APIs to splice new content into the
|
|
41
|
+
* existing class. Then `save()` writes back. No re-emit, no overwrite.
|
|
42
|
+
*
|
|
43
|
+
* Hard fails:
|
|
44
|
+
* - The POM file at `pages/<name>.page.ts` does not exist.
|
|
45
|
+
* - The class declared in the file doesn't match `--page <Name>`.
|
|
46
|
+
*
|
|
47
|
+
* See docs/ARCHITECTURE.md §4.
|
|
48
|
+
*/
|
|
49
|
+
export declare function updatePom(opts: UpdatePomOptions): Promise<UpdatePomResult>;
|