@immense/vue-pom-generator 1.0.57 → 1.0.59
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 +7 -19
- package/RELEASE_NOTES.md +76 -13
- package/class-generation/base-page.ts +6 -13
- package/class-generation/index.ts +226 -317
- package/class-generation/playwright-types.ts +1 -1
- package/click-instrumentation.ts +0 -4
- package/dist/class-generation/base-page.d.ts +1 -0
- package/dist/class-generation/base-page.d.ts.map +1 -1
- package/dist/class-generation/index.d.ts +2 -0
- package/dist/class-generation/index.d.ts.map +1 -1
- package/dist/class-generation/playwright-types.d.ts +1 -1
- package/dist/class-generation/playwright-types.d.ts.map +1 -1
- package/dist/click-instrumentation.d.ts +0 -1
- package/dist/click-instrumentation.d.ts.map +1 -1
- package/dist/index.cjs +1283 -1019
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1285 -1021
- package/dist/index.mjs.map +1 -1
- package/dist/method-generation.d.ts +4 -2
- package/dist/method-generation.d.ts.map +1 -1
- package/dist/playwright.config.d.ts.map +1 -1
- package/dist/plugin/create-vue-pom-generator-plugins.d.ts.map +1 -1
- package/dist/plugin/nuxt-discovery.d.ts.map +1 -1
- package/dist/plugin/resolved-generation-options.d.ts +33 -0
- package/dist/plugin/resolved-generation-options.d.ts.map +1 -0
- package/dist/plugin/resolved-injection-options.d.ts +27 -0
- package/dist/plugin/resolved-injection-options.d.ts.map +1 -0
- package/dist/plugin/support/build-plugin.d.ts +2 -29
- package/dist/plugin/support/build-plugin.d.ts.map +1 -1
- package/dist/plugin/support/dev-plugin.d.ts +2 -28
- package/dist/plugin/support/dev-plugin.d.ts.map +1 -1
- package/dist/plugin/support-plugins.d.ts +2 -32
- package/dist/plugin/support-plugins.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +6 -23
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/vue-plugin.d.ts.map +1 -1
- package/dist/pom-params.d.ts +40 -0
- package/dist/pom-params.d.ts.map +1 -0
- package/dist/pom-patterns.d.ts +31 -0
- package/dist/pom-patterns.d.ts.map +1 -0
- package/dist/routing/to-directive.d.ts +21 -0
- package/dist/routing/to-directive.d.ts.map +1 -1
- package/dist/tests/base-page.test.d.ts +2 -0
- package/dist/tests/base-page.test.d.ts.map +1 -0
- package/dist/tests/resolved-injection-options.test.d.ts +2 -0
- package/dist/tests/resolved-injection-options.test.d.ts.map +1 -0
- package/dist/transform.d.ts +0 -1
- package/dist/transform.d.ts.map +1 -1
- package/dist/utils.d.ts +129 -63
- package/dist/utils.d.ts.map +1 -1
- package/package.json +6 -4
- package/sequence-diagram.md +6 -6
package/dist/utils.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import type { AttributeNode, DirectiveNode, ElementNode, TransformContext } from "@vue/compiler-core";
|
|
1
|
+
import type { AttributeNode, CompoundExpressionNode, DirectiveNode, ElementNode, SimpleExpressionNode, TransformContext } from "@vue/compiler-core";
|
|
2
2
|
import type { TemplateLiteral } from "@babel/types";
|
|
3
|
+
import { type PomStringPattern } from "./pom-patterns";
|
|
4
|
+
import { type PomMethodSignature, type PomParameterSpec } from "./pom-params";
|
|
3
5
|
export { isSimpleExpressionNode } from "./compiler/ast-guards";
|
|
4
6
|
export type { RouterIntrospectionResult } from "./router-introspection";
|
|
5
|
-
export { getRouteNameKeyFromToDirective, setResolveToComponentNameFn, setRouteNameToComponentNameMap, tryResolveToDirectiveTargetComponentName, } from "./routing/to-directive";
|
|
7
|
+
export { analyzeToDirectiveTarget, getRouteNameKeyFromToDirective, setResolveToComponentNameFn, setRouteNameToComponentNameMap, tryResolveToDirectiveTargetComponentName, } from "./routing/to-directive";
|
|
8
|
+
export type { RouteDirectiveTargetAnalysis } from "./routing/to-directive";
|
|
6
9
|
export declare function upperFirst(value: string): string;
|
|
7
10
|
export declare function isAsciiUppercaseLetterCode(code: number): boolean;
|
|
8
11
|
export declare function isAsciiLowercaseLetterCode(code: number): boolean;
|
|
@@ -21,16 +24,38 @@ export interface NativeWrappersMap {
|
|
|
21
24
|
inferred?: boolean;
|
|
22
25
|
};
|
|
23
26
|
}
|
|
27
|
+
export interface ParsedTemplateFragment {
|
|
28
|
+
source: string;
|
|
29
|
+
templateLiteral: TemplateLiteral;
|
|
30
|
+
}
|
|
24
31
|
export type AttributeValue = {
|
|
25
32
|
kind: "static";
|
|
26
33
|
value: string;
|
|
27
34
|
} | {
|
|
28
35
|
kind: "template";
|
|
29
36
|
template: string;
|
|
37
|
+
parsedTemplate: ParsedTemplateFragment;
|
|
30
38
|
};
|
|
39
|
+
type VueExpressionNode = SimpleExpressionNode | CompoundExpressionNode;
|
|
40
|
+
type VueExpressionSourceView = "content" | "loc" | "compiled";
|
|
41
|
+
export interface ResolvedKeyInfo {
|
|
42
|
+
selectorFragment: string;
|
|
43
|
+
runtimeFragment: string;
|
|
44
|
+
rawExpression: string | null;
|
|
45
|
+
}
|
|
31
46
|
export declare function staticAttributeValue(value: string): AttributeValue;
|
|
32
|
-
export declare function templateAttributeValue(template: string): AttributeValue
|
|
47
|
+
export declare function templateAttributeValue(template: string): Extract<AttributeValue, {
|
|
48
|
+
kind: "template";
|
|
49
|
+
}>;
|
|
33
50
|
export declare function getAttributeValueText(value: AttributeValue): string;
|
|
51
|
+
/**
|
|
52
|
+
* Reads source text from a Vue compiler expression using the preferred view order.
|
|
53
|
+
*
|
|
54
|
+
* - `content`: original SIMPLE_EXPRESSION content
|
|
55
|
+
* - `loc`: author-written template source from `loc.source`
|
|
56
|
+
* - `compiled`: compiler-rewritten source from `stringifyExpression()`
|
|
57
|
+
*/
|
|
58
|
+
export declare function getVueExpressionSource(expression: VueExpressionNode | null | undefined, ...preferredViews: VueExpressionSourceView[]): string;
|
|
34
59
|
/**
|
|
35
60
|
* Converts a string to PascalCase.
|
|
36
61
|
*
|
|
@@ -73,14 +98,57 @@ declare function splitNullishCoalescingExpression(expr: string): string[];
|
|
|
73
98
|
*/
|
|
74
99
|
export declare function nodeHasToDirective(node: ElementNode): DirectiveNode | undefined;
|
|
75
100
|
/**
|
|
76
|
-
*
|
|
101
|
+
* Returns `true` when a template fragment already contains one or more `${...}` interpolations.
|
|
77
102
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
103
|
+
* @example
|
|
104
|
+
* hasTemplateInterpolationExpressions("line-${item.id}")
|
|
105
|
+
* // => true
|
|
80
106
|
*
|
|
81
|
-
* @
|
|
107
|
+
* @example
|
|
108
|
+
* hasTemplateInterpolationExpressions("item.id")
|
|
109
|
+
* // => false
|
|
82
110
|
*/
|
|
83
|
-
export declare function
|
|
111
|
+
export declare function hasTemplateInterpolationExpressions(fragment: string): boolean;
|
|
112
|
+
export interface InterpolatedTemplateFragment {
|
|
113
|
+
template: string;
|
|
114
|
+
rawExpression: string | null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Normalizes a fragment into something safe to splice into a template literal.
|
|
118
|
+
*
|
|
119
|
+
* Raw expressions become `${...}` placeholders; fragments that already contain template
|
|
120
|
+
* interpolations are returned as-is.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* toInterpolatedTemplateFragment("item.id")
|
|
124
|
+
* // => { template: "${item.id}", rawExpression: "item.id" }
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* toInterpolatedTemplateFragment("line-${item.id}")
|
|
128
|
+
* // => { template: "line-${item.id}", rawExpression: null }
|
|
129
|
+
*/
|
|
130
|
+
export declare function toInterpolatedTemplateFragment(fragment: string | null): InterpolatedTemplateFragment | null;
|
|
131
|
+
/**
|
|
132
|
+
* Reconstructs a full template-literal expression from a template AttributeValue using its parsed quasis/expressions.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* const templateValue = templateAttributeValue("line-${item.id}");
|
|
136
|
+
* if (templateValue.kind === "template") {
|
|
137
|
+
* renderTemplateLiteralExpression(templateValue)
|
|
138
|
+
* }
|
|
139
|
+
* // => "`line-${item.id}`"
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* const templateValue = templateAttributeValue("plain-text");
|
|
143
|
+
* if (templateValue.kind === "template") {
|
|
144
|
+
* renderTemplateLiteralExpression(templateValue)
|
|
145
|
+
* }
|
|
146
|
+
* // => "`plain-text`"
|
|
147
|
+
*/
|
|
148
|
+
export declare function renderTemplateLiteralExpression(templateValue: Extract<AttributeValue, {
|
|
149
|
+
kind: "template";
|
|
150
|
+
}>): string;
|
|
151
|
+
export declare function getKeyDirectiveInfo(node: ElementNode): ResolvedKeyInfo | null;
|
|
84
152
|
/**
|
|
85
153
|
* Gets both v-model and :model-value directive values in a single pass
|
|
86
154
|
* Consolidates the previous getVModelDirectiveValue and getModelValueValue helpers
|
|
@@ -102,12 +170,14 @@ export declare function getSelfClosingForDirectiveKeyAttrValue(node: ElementNode
|
|
|
102
170
|
/**
|
|
103
171
|
* Gets the id or name attribute value from a node
|
|
104
172
|
*
|
|
105
|
-
* Returns the identifier, converting dashes and underscores to PascalCase
|
|
106
|
-
*
|
|
173
|
+
* Returns the identifier, converting dashes and underscores to PascalCase.
|
|
174
|
+
*
|
|
175
|
+
* Dynamic `:id` / `:name` bindings are intentionally ignored here because they are not stable
|
|
176
|
+
* semantic hints for generated POM member names.
|
|
107
177
|
*
|
|
108
178
|
* @internal
|
|
109
179
|
*/
|
|
110
|
-
export declare function
|
|
180
|
+
export declare function getStaticIdOrNameHint(node: ElementNode): string;
|
|
111
181
|
/**
|
|
112
182
|
* Checks if a node is contained within a template element that has slot scope data
|
|
113
183
|
*
|
|
@@ -117,23 +187,8 @@ export declare function getIdOrName(node: ElementNode): string;
|
|
|
117
187
|
* @internal
|
|
118
188
|
*/
|
|
119
189
|
export declare function isNodeContainedInTemplateWithData(node: ElementNode, hierarchyMap: HierarchyMap): boolean;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
*
|
|
123
|
-
* If the node is within a slot that has scope variables (e.g. #item="{ data }"),
|
|
124
|
-
* returns a placeholder derived from that scope.
|
|
125
|
-
*
|
|
126
|
-
* @internal
|
|
127
|
-
*/
|
|
128
|
-
export declare function getContainedInSlotDataKeyValue(node: ElementNode, hierarchyMap: HierarchyMap): string | null;
|
|
129
|
-
/**
|
|
130
|
-
* Extracts the key value expression from a v-for directive on a parent element
|
|
131
|
-
*
|
|
132
|
-
* If the node is within a v-for that has a :key directive, returns the key expression.
|
|
133
|
-
*
|
|
134
|
-
* @internal
|
|
135
|
-
*/
|
|
136
|
-
export declare function getContainedInVForDirectiveKeyValue(context: TransformContext, node: ElementNode, hierarchyMap: HierarchyMap): string | null;
|
|
190
|
+
export declare function getContainedInSlotDataKeyInfo(node: ElementNode, hierarchyMap: HierarchyMap): ResolvedKeyInfo | null;
|
|
191
|
+
export declare function getContainedInVForDirectiveKeyInfo(context: TransformContext, node: ElementNode, hierarchyMap: HierarchyMap): ResolvedKeyInfo | null;
|
|
137
192
|
/**
|
|
138
193
|
* If the current node is inside a v-for whose iterable is a static array literal,
|
|
139
194
|
* returns the iterable's *string literal values*.
|
|
@@ -228,11 +283,18 @@ export interface ExistingElementDataTestIdInfo {
|
|
|
228
283
|
isStaticLiteral: boolean;
|
|
229
284
|
/** When the binding can be preserved as a one-slot template, the unwrapped template text (without backticks). */
|
|
230
285
|
template?: string;
|
|
286
|
+
/** Parsed template metadata for preserve-safe template ids. */
|
|
287
|
+
parsedTemplate?: ParsedTemplateFragment;
|
|
231
288
|
/** Number of interpolations in the template literal, if known. */
|
|
232
289
|
templateExpressionCount?: number;
|
|
233
290
|
/** For non-template dynamic bindings, the raw expression string (identifier/call/etc). */
|
|
234
291
|
rawExpression?: string;
|
|
235
292
|
}
|
|
293
|
+
export interface ResolvedDataTestIdValues {
|
|
294
|
+
selectorValue: AttributeValue;
|
|
295
|
+
runtimeValue: AttributeValue;
|
|
296
|
+
fromExisting: boolean;
|
|
297
|
+
}
|
|
236
298
|
/**
|
|
237
299
|
* Extracts existing data-testid info from an element.
|
|
238
300
|
*
|
|
@@ -247,17 +309,20 @@ export interface ExistingElementDataTestIdInfo {
|
|
|
247
309
|
export declare function tryGetExistingElementDataTestId(node: ElementNode, attributeName?: string): ExistingElementDataTestIdInfo | null;
|
|
248
310
|
declare function safeMethodNameFromParts(parts: string[]): string;
|
|
249
311
|
/**
|
|
250
|
-
* Replaces any `${...}` interpolation in a template string with the stable placeholder `${key}`.
|
|
312
|
+
* Replaces any `${...}` interpolation in a template string with the stable POM placeholder `${key}`.
|
|
251
313
|
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
314
|
+
* This is only for the generated POM selector shape. Runtime/test-id generation keeps the real
|
|
315
|
+
* interpolation expressions; the POM layer just needs to know that a keyed slot exists and where
|
|
316
|
+
* it sits relative to the surrounding literal text.
|
|
254
317
|
*/
|
|
255
|
-
declare function
|
|
318
|
+
declare function toPomKeyPattern(templateValue: Extract<AttributeValue, {
|
|
319
|
+
kind: "template";
|
|
320
|
+
}>): string;
|
|
256
321
|
export declare const __internal: {
|
|
257
322
|
isSimpleScopeIdentifier: typeof isSimpleScopeIdentifier;
|
|
258
323
|
safeMethodNameFromParts: typeof safeMethodNameFromParts;
|
|
259
324
|
splitNullishCoalescingExpression: typeof splitNullishCoalescingExpression;
|
|
260
|
-
|
|
325
|
+
toPomKeyPattern: typeof toPomKeyPattern;
|
|
261
326
|
};
|
|
262
327
|
/**
|
|
263
328
|
* Resolve/apply a data-testid for an element, record it into dependencies, and append generated POM method content.
|
|
@@ -274,12 +339,11 @@ export declare function applyResolvedDataTestId(args: {
|
|
|
274
339
|
generatedMethodContentByComponent: Map<string, Set<string>>;
|
|
275
340
|
nativeRole: string;
|
|
276
341
|
preferredGeneratedValue: AttributeValue;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
bestKeyVariable?: string | null;
|
|
342
|
+
preferredRuntimeValue?: AttributeValue;
|
|
343
|
+
keyInfo: ResolvedKeyInfo | null;
|
|
280
344
|
/** Optional enumerable key values (e.g. derived from v-for="item in ['One','Two']"). */
|
|
281
345
|
keyValuesOverride?: string[] | null;
|
|
282
|
-
entryOverrides?:
|
|
346
|
+
entryOverrides?: DataTestIdEntryOverrides;
|
|
283
347
|
/**
|
|
284
348
|
* Semantic naming hint used for generating method/property names.
|
|
285
349
|
*
|
|
@@ -308,23 +372,23 @@ export declare function applyResolvedDataTestId(args: {
|
|
|
308
372
|
/**
|
|
309
373
|
* How to handle an author-provided existing test id attribute when we encounter one.
|
|
310
374
|
*
|
|
311
|
-
* - "
|
|
375
|
+
* - "error": throw to force cleanup/migration (default)
|
|
376
|
+
* - "preserve": keep the existing value
|
|
312
377
|
* - "overwrite": replace it with the generated value
|
|
313
|
-
* - "error": throw to force cleanup/migration
|
|
314
378
|
*/
|
|
315
379
|
existingIdBehavior?: "preserve" | "overwrite" | "error";
|
|
316
380
|
/**
|
|
317
381
|
* Controls what happens when the generator would emit duplicate POM member names within the same class.
|
|
318
|
-
* - "error": throw and fail compilation
|
|
382
|
+
* - "error": throw and fail compilation (default)
|
|
319
383
|
* - "warn": warn and append a suffix
|
|
320
|
-
* - "suffix": append a suffix silently
|
|
384
|
+
* - "suffix": append a suffix silently
|
|
321
385
|
*/
|
|
322
386
|
nameCollisionBehavior?: "error" | "warn" | "suffix";
|
|
323
387
|
/** Optional warning sink (typically the shared generator logger). */
|
|
324
388
|
warn?: (message: string) => void;
|
|
325
|
-
}):
|
|
389
|
+
}): ResolvedDataTestIdValues;
|
|
326
390
|
export interface IDataTestId {
|
|
327
|
-
|
|
391
|
+
selectorValue: PomStringPattern;
|
|
328
392
|
/** Optional parsed/constructed template literal for AST-based formatting in codegen. */
|
|
329
393
|
templateLiteral?: TemplateLiteral;
|
|
330
394
|
/** When the element is a router-link-like navigation, the resolved target page class name (e.g. TenantDetailsPage). */
|
|
@@ -337,12 +401,17 @@ export interface IDataTestId {
|
|
|
337
401
|
*/
|
|
338
402
|
pom?: PomPrimarySpec;
|
|
339
403
|
}
|
|
404
|
+
export interface DataTestIdEntryOverrides {
|
|
405
|
+
selectorValue?: PomStringPattern;
|
|
406
|
+
templateLiteral?: TemplateLiteral;
|
|
407
|
+
targetPageObjectModelClass?: string;
|
|
408
|
+
}
|
|
340
409
|
/**
|
|
341
410
|
* Structured representation of a generated element for POM emission.
|
|
342
411
|
*
|
|
343
|
-
* - `
|
|
344
|
-
* - `
|
|
345
|
-
* C# emission maps these
|
|
412
|
+
* - `selector` carries both the rendered selector text and whether it is static or parameterized.
|
|
413
|
+
* - `parameters` are TypeScript-flavored today because TS is our reference emitter;
|
|
414
|
+
* C# emission maps these parameters to C# types.
|
|
346
415
|
*/
|
|
347
416
|
export interface PomPrimarySpec {
|
|
348
417
|
nativeRole: NativeRole;
|
|
@@ -350,14 +419,14 @@ export interface PomPrimarySpec {
|
|
|
350
419
|
methodName: string;
|
|
351
420
|
/** Optional override for the generated locator getter name (used for edge-case collision avoidance). */
|
|
352
421
|
getterNameOverride?: string;
|
|
353
|
-
/** Test id pattern used by generated POM methods
|
|
354
|
-
|
|
355
|
-
/** Additional
|
|
356
|
-
|
|
422
|
+
/** Test id pattern used by generated POM methods. Parameterized patterns still render with `${key}`. */
|
|
423
|
+
selector: PomStringPattern;
|
|
424
|
+
/** Additional selector patterns that should be treated as equivalent to `selector` (merge-by-action). */
|
|
425
|
+
alternateSelectors?: PomStringPattern[];
|
|
357
426
|
/** Optional key used to decide whether distinct elements should be merged into one POM member. */
|
|
358
427
|
mergeKey?: string;
|
|
359
|
-
/**
|
|
360
|
-
|
|
428
|
+
/** Structured method parameters used by emitters and signature metadata. */
|
|
429
|
+
parameters: PomParameterSpec[];
|
|
361
430
|
/** Optional enum values for key when derived from a static v-for list. */
|
|
362
431
|
keyValuesOverride?: string[] | null;
|
|
363
432
|
/** When false, emitters should NOT emit the primary method/locator for this entry. */
|
|
@@ -365,14 +434,14 @@ export interface PomPrimarySpec {
|
|
|
365
434
|
}
|
|
366
435
|
export type PomSelectorSpec = {
|
|
367
436
|
kind: "testId";
|
|
368
|
-
/** Static or
|
|
369
|
-
|
|
437
|
+
/** Static or parameterized test id; parameterized patterns render with `${key}`. */
|
|
438
|
+
testId: PomStringPattern;
|
|
370
439
|
} | {
|
|
371
440
|
kind: "withinTestIdByLabel";
|
|
372
441
|
/** Wrapper/root test id to scope the label search under. */
|
|
373
|
-
|
|
374
|
-
/** Visible label text; may
|
|
375
|
-
|
|
442
|
+
rootTestId: PomStringPattern;
|
|
443
|
+
/** Visible label text; parameterized labels may contain `${value}`. */
|
|
444
|
+
label: PomStringPattern;
|
|
376
445
|
exact?: boolean;
|
|
377
446
|
};
|
|
378
447
|
/**
|
|
@@ -388,7 +457,7 @@ export interface PomExtraClickMethodSpec {
|
|
|
388
457
|
selector: PomSelectorSpec;
|
|
389
458
|
/** Optional fixed key to substitute into `${key}` in the method body. */
|
|
390
459
|
keyLiteral?: string;
|
|
391
|
-
|
|
460
|
+
parameters: PomParameterSpec[];
|
|
392
461
|
}
|
|
393
462
|
export interface IComponentDependencies {
|
|
394
463
|
filePath: string;
|
|
@@ -411,13 +480,10 @@ export interface IComponentDependencies {
|
|
|
411
480
|
* without re-parsing the generated TypeScript.
|
|
412
481
|
*
|
|
413
482
|
* - key: method name
|
|
414
|
-
* - value:
|
|
483
|
+
* - value: structured parameters when the signature is known and consistent
|
|
415
484
|
* null when multiple distinct signatures were observed for the same name
|
|
416
485
|
*/
|
|
417
|
-
generatedMethods?: Map<string,
|
|
418
|
-
params: string;
|
|
419
|
-
argNames: string[];
|
|
420
|
-
} | null>;
|
|
486
|
+
generatedMethods?: Map<string, PomMethodSignature | null>;
|
|
421
487
|
isView?: boolean;
|
|
422
488
|
/**
|
|
423
489
|
* Extra methods emitted for this component/view (beyond the primary per-element methods).
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@immense/vue-pom-generator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.59",
|
|
4
4
|
"description": "Injects data-testid attributes for all interactive elements and generates page object models for every page.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"@vue/compiler-dom": ">=3.5",
|
|
62
62
|
"@vue/compiler-sfc": ">=3.5",
|
|
63
63
|
"eslint": ">=9",
|
|
64
|
+
"playwright": "1.59.1",
|
|
64
65
|
"vite": "^5 || ^6 || ^7"
|
|
65
66
|
},
|
|
66
67
|
"peerDependenciesMeta": {
|
|
@@ -72,11 +73,11 @@
|
|
|
72
73
|
"ts-morph": "^27.0.2"
|
|
73
74
|
},
|
|
74
75
|
"devDependencies": {
|
|
75
|
-
"@babel/types": "^7.28.5",
|
|
76
76
|
"@antfu/eslint-config": "5.3.0",
|
|
77
|
-
"@
|
|
77
|
+
"@babel/types": "^7.28.5",
|
|
78
78
|
"@floating-ui/core": "^1.7.5",
|
|
79
|
-
"@
|
|
79
|
+
"@github/copilot-sdk": "^0.1.8",
|
|
80
|
+
"@playwright/test": "1.59.1",
|
|
80
81
|
"@types/jsdom": "^27.0.0",
|
|
81
82
|
"@types/node": "^24.1.0",
|
|
82
83
|
"@vitest/coverage-v8": "^4.0.16",
|
|
@@ -84,6 +85,7 @@
|
|
|
84
85
|
"eslint": "^9.27.0",
|
|
85
86
|
"jsdom": "^27.4.0",
|
|
86
87
|
"knip": "^5.82.1",
|
|
88
|
+
"playwright": "1.59.1",
|
|
87
89
|
"simple-git-hooks": "^2.13.1",
|
|
88
90
|
"typescript": "^5.9.2",
|
|
89
91
|
"vite": "^7.3.1",
|
package/sequence-diagram.md
CHANGED
|
@@ -83,14 +83,14 @@ sequenceDiagram
|
|
|
83
83
|
Transform->>Generators: getSelfClosingForDirectiveKeyAttrValue(node)
|
|
84
84
|
Generators-->>Transform: return key value or null
|
|
85
85
|
else Not in for directive
|
|
86
|
-
Transform->>Generators:
|
|
87
|
-
Generators-->>Transform: return key
|
|
86
|
+
Transform->>Generators: getContainedInVForDirectiveKeyInfo(context)
|
|
87
|
+
Generators-->>Transform: return selector/runtime key info or null
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
alt No key found
|
|
92
|
-
Transform->>Generators:
|
|
93
|
-
Generators-->>Transform: return key
|
|
92
|
+
Transform->>Generators: getKeyDirectiveInfo(node)
|
|
93
|
+
Generators-->>Transform: return selector/runtime key info or null
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
alt keyAttributeValue contains placeholder
|
|
@@ -98,7 +98,7 @@ sequenceDiagram
|
|
|
98
98
|
else Generate complex testId
|
|
99
99
|
Transform->>Generators: generateTestId(node, context, toDirective, typeSubmit, key, componentName)
|
|
100
100
|
Note over Generators: generateTestId Process
|
|
101
|
-
Generators->>Generators:
|
|
101
|
+
Generators->>Generators: getStaticIdOrNameHint(node) - extract static id/name
|
|
102
102
|
Generators->>Generators: getInnerText(node) - extract text content
|
|
103
103
|
Generators->>Generators: Compose testId based on directives
|
|
104
104
|
alt toDirective exists
|
|
@@ -165,7 +165,7 @@ Multiple specialized generators handle different element types:
|
|
|
165
165
|
- `isOptionTagWithvalue()` - For option elements
|
|
166
166
|
|
|
167
167
|
### 4. **Helper Functions**
|
|
168
|
-
- `
|
|
168
|
+
- `getStaticIdOrNameHint()` - Extracts static id/name attributes
|
|
169
169
|
- `getInnerText()` - Extracts text content from children
|
|
170
170
|
- `formatTagName()` - Formats tag suffix (e.g., "_btn")
|
|
171
171
|
- `getComposedClickHandlerContent()` - Analyzes @click handlers
|