@sun-asterisk/sungen 2.6.3 → 2.6.5

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/cli/index.js CHANGED
@@ -20,7 +20,7 @@ async function main() {
20
20
  program
21
21
  .name('sungen')
22
22
  .description('Deterministic E2E Test Compiler — Gherkin + Selectors → Playwright')
23
- .version('2.6.3');
23
+ .version('2.6.5');
24
24
  // Global options
25
25
  program
26
26
  .option('-v, --verbose', 'Enable verbose logging');
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-patterns.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/patterns/navigation-patterns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,EA2G3C,CAAC"}
1
+ {"version":3,"file":"navigation-patterns.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/patterns/navigation-patterns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,EAoI3C,CAAC"}
@@ -11,18 +11,33 @@ exports.navigationPatterns = [
11
11
  matcher: (step) => (step.text.includes('open') || step.text.includes('opens') || step.text.includes('is on') || step.text.includes('navigate to')) &&
12
12
  step.elementType === 'page',
13
13
  resolver: (step, context) => {
14
- let path = context.featurePath || '/';
14
+ const isThen = context.effectiveKeyword === 'Then';
15
+ // Cross-screen page refs (e.g. Then User is on [dashboard] page) won't be in the
16
+ // current screen's selectors. Fall back to /<ref>/ for assertion paths instead of
17
+ // the current featurePath, which would silently make the assertion always pass.
18
+ const pathFallback = isThen && step.selectorRef
19
+ ? `/${step.selectorRef}/`
20
+ : (context.featurePath || '/');
21
+ let path = pathFallback;
15
22
  if (step.selectorRef) {
16
23
  try {
17
24
  const resolved = context.selectorResolver.resolveSelector(step.selectorRef, context.featureName, step.elementType, step.nth);
18
- path = resolved.value || path;
25
+ path = resolved.value || pathFallback;
19
26
  }
20
27
  catch (error) {
21
- path = context.featurePath || '/';
28
+ path = pathFallback;
22
29
  }
23
30
  }
24
31
  const finalPath = (0, path_inference_1.resolvePathVariables)(path, context.scenarioSteps || []);
25
32
  const isAbsoluteUrl = /^https?:\/\//.test(finalPath);
33
+ // Then User is on [X] page — assert URL, don't navigate.
34
+ if (isThen) {
35
+ return {
36
+ templateName: 'route-assertion',
37
+ data: { path: finalPath },
38
+ comment: step.selectorRef ? `Assert on ${step.selectorRef} page` : `Assert page route`,
39
+ };
40
+ }
26
41
  return {
27
42
  templateName: 'navigation',
28
43
  data: { baseURL: isAbsoluteUrl ? undefined : context.baseURL, path: finalPath },
@@ -62,6 +77,7 @@ exports.navigationPatterns = [
62
77
  !!(step.selectorRef || step.dataRef),
63
78
  resolver: (step, context) => {
64
79
  const route = step.selectorRef || step.dataRef;
80
+ const isThen = context.effectiveKeyword === 'Then';
65
81
  const inferredPath = (0, path_inference_1.inferPath)(context.featurePath, {
66
82
  featureName: context.featureName,
67
83
  screenName: context.screenName,
@@ -70,6 +86,13 @@ exports.navigationPatterns = [
70
86
  const pathCode = (0, path_inference_1.getPathCode)(resolvedPath);
71
87
  const cleanPath = pathCode.replace(/^['`]|['`]$/g, '');
72
88
  const isAbsoluteUrl = /^https?:\/\//.test(cleanPath);
89
+ if (isThen) {
90
+ return {
91
+ templateName: 'route-assertion',
92
+ data: { path: cleanPath },
93
+ comment: `Assert on ${route}`,
94
+ };
95
+ }
73
96
  return {
74
97
  templateName: 'navigation',
75
98
  data: { baseURL: isAbsoluteUrl ? undefined : context.baseURL, path: cleanPath },
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-patterns.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/patterns/navigation-patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation-patterns.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/patterns/navigation-patterns.ts"],"names":[],"mappings":";;;AAEA,4DAAuF;AAEvF;;GAEG;AACU,QAAA,kBAAkB,GAAkB;IAC/C;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE,CAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC/H,IAAI,CAAC,WAAW,KAAK,MAAM;QAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,KAAK,MAAM,CAAC;YACnD,iFAAiF;YACjF,kFAAkF;YAClF,gFAAgF;YAChF,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW;gBAC7C,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG;gBACzB,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;YACjC,IAAI,IAAI,GAAG,YAAY,CAAC;YAExB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,CACvD,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAClE,CAAC;oBACF,IAAI,GAAG,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC;gBACxC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,GAAG,YAAY,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,IAAA,qCAAoB,EAAC,IAAI,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YAC1E,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAErD,yDAAyD;YACzD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,YAAY,EAAE,iBAAiB;oBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,mBAAmB;iBACvF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/E,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,kBAAkB;aACjF,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE,CAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,WAAW,KAAK,MAAM;QAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAEnD,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,OAAO,CAAC,WAAW,EAAE;gBAClD,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,qCAAoB,EAAC,YAAY,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAA,4BAAW,EAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAErD,OAAO;gBACL,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/E,OAAO,EAAE,QAAQ,QAAQ,EAAE;aAC5B,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE,CAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;QACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,KAAK,MAAM,CAAC;YAEnD,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,OAAO,CAAC,WAAW,EAAE;gBAClD,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,qCAAoB,EAAC,YAAY,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAA,4BAAW,EAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAErD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,YAAY,EAAE,iBAAiB;oBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzB,OAAO,EAAE,aAAa,KAAK,EAAE;iBAC9B,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/E,OAAO,EAAE,eAAe,KAAK,EAAE;aAChC,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE,CAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;QACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YAE/C,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,OAAO,CAAC,WAAW,EAAE;gBAClD,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,qCAAoB,EAAC,YAAY,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAA,4BAAW,EAAC,YAAY,CAAC,CAAC;YAE3C,OAAO;gBACL,YAAY,EAAE,iBAAiB;gBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE;gBACpD,OAAO,EAAE,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAC"}
@@ -38,7 +38,7 @@ export interface FigmaRawNode {
38
38
  componentPropertyDefinitions?: Record<string, unknown>;
39
39
  /** Variant property values for COMPONENT nodes. */
40
40
  componentProperties?: Record<string, {
41
- value: string;
41
+ value: string | boolean;
42
42
  type: string;
43
43
  }>;
44
44
  /** Bounding box from absoluteBoundingBox. */
@@ -1 +1 @@
1
- {"version":3,"file":"figma-client-types.d.ts","sourceRoot":"","sources":["../../../src/tools/figma/figma-client-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"figma-client-types.d.ts","sourceRoot":"","sources":["../../../src/tools/figma/figma-client-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,mBAAmB;IACnB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,yCAAyC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACzD,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAMD,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE3E,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iDAAiD;IACjD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,8CAA8C;IAC9C,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAMD,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACxC;AAMD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"figma-node-filter.d.ts","sourceRoot":"","sources":["../../../src/tools/figma/figma-node-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACd,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAgI9B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CASnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,KAAK,SAAK,GACT,cAAc,EAAE,CAalB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,iBAAiB,GAClC,sBAAsB,EAAE,CAU1B"}
1
+ {"version":3,"file":"figma-node-filter.d.ts","sourceRoot":"","sources":["../../../src/tools/figma/figma-node-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACd,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAuI9B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CASnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,KAAK,SAAK,GACT,cAAc,EAAE,CAalB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,iBAAiB,GAClC,sBAAsB,EAAE,CAU1B"}
@@ -24,7 +24,11 @@ const RawNodeSchema = zod_1.z
24
24
  characters: zod_1.z.string().optional(),
25
25
  componentPropertyDefinitions: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
26
26
  componentProperties: zod_1.z
27
- .record(zod_1.z.string(), zod_1.z.object({ value: zod_1.z.string(), type: zod_1.z.string() }))
27
+ .record(zod_1.z.string(), zod_1.z.object({
28
+ // Figma returns boolean for type=BOOLEAN, string for TEXT/INSTANCE_SWAP/VARIANT
29
+ value: zod_1.z.union([zod_1.z.string(), zod_1.z.boolean()]),
30
+ type: zod_1.z.string(),
31
+ }))
28
32
  .optional(),
29
33
  absoluteBoundingBox: zod_1.z
30
34
  .object({ x: zod_1.z.number(), y: zod_1.z.number(), width: zod_1.z.number(), height: zod_1.z.number() })
@@ -90,7 +94,7 @@ function filterNode(raw, depth = 0, maxDepth = 30) {
90
94
  componentName = name;
91
95
  const props = raw['componentProperties'];
92
96
  if (props) {
93
- variantProps = Object.fromEntries(Object.entries(props).map(([k, v]) => [k, v.value]));
97
+ variantProps = Object.fromEntries(Object.entries(props).map(([k, v]) => [k, String(v.value)]));
94
98
  }
95
99
  }
96
100
  // Role (only meaningful for component-like nodes)
@@ -1 +1 @@
1
- {"version":3,"file":"figma-node-filter.js","sourceRoot":"","sources":["../../../src/tools/figma/figma-node-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"figma-node-filter.js","sourceRoot":"","sources":["../../../src/tools/figma/figma-node-filter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sun-asterisk/sungen",
3
- "version": "2.6.3",
3
+ "version": "2.6.5",
4
4
  "description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/cli/index.ts CHANGED
@@ -21,7 +21,7 @@ async function main() {
21
21
  program
22
22
  .name('sungen')
23
23
  .description('Deterministic E2E Test Compiler — Gherkin + Selectors → Playwright')
24
- .version('2.6.3');
24
+ .version('2.6.5');
25
25
 
26
26
  // Global options
27
27
  program
@@ -12,22 +12,38 @@ export const navigationPatterns: StepPattern[] = [
12
12
  (step.text.includes('open') || step.text.includes('opens') || step.text.includes('is on') || step.text.includes('navigate to')) &&
13
13
  step.elementType === 'page',
14
14
  resolver: (step, context) => {
15
- let path = context.featurePath || '/';
15
+ const isThen = context.effectiveKeyword === 'Then';
16
+ // Cross-screen page refs (e.g. Then User is on [dashboard] page) won't be in the
17
+ // current screen's selectors. Fall back to /<ref>/ for assertion paths instead of
18
+ // the current featurePath, which would silently make the assertion always pass.
19
+ const pathFallback = isThen && step.selectorRef
20
+ ? `/${step.selectorRef}/`
21
+ : (context.featurePath || '/');
22
+ let path = pathFallback;
16
23
 
17
24
  if (step.selectorRef) {
18
25
  try {
19
26
  const resolved = context.selectorResolver.resolveSelector(
20
27
  step.selectorRef, context.featureName, step.elementType, step.nth
21
28
  );
22
- path = resolved.value || path;
29
+ path = resolved.value || pathFallback;
23
30
  } catch (error) {
24
- path = context.featurePath || '/';
31
+ path = pathFallback;
25
32
  }
26
33
  }
27
34
 
28
35
  const finalPath = resolvePathVariables(path, context.scenarioSteps || []);
29
36
  const isAbsoluteUrl = /^https?:\/\//.test(finalPath);
30
37
 
38
+ // Then User is on [X] page — assert URL, don't navigate.
39
+ if (isThen) {
40
+ return {
41
+ templateName: 'route-assertion',
42
+ data: { path: finalPath },
43
+ comment: step.selectorRef ? `Assert on ${step.selectorRef} page` : `Assert page route`,
44
+ };
45
+ }
46
+
31
47
  return {
32
48
  templateName: 'navigation',
33
49
  data: { baseURL: isAbsoluteUrl ? undefined : context.baseURL, path: finalPath },
@@ -71,6 +87,7 @@ export const navigationPatterns: StepPattern[] = [
71
87
  !!(step.selectorRef || step.dataRef),
72
88
  resolver: (step, context) => {
73
89
  const route = step.selectorRef || step.dataRef;
90
+ const isThen = context.effectiveKeyword === 'Then';
74
91
 
75
92
  const inferredPath = inferPath(context.featurePath, {
76
93
  featureName: context.featureName,
@@ -81,6 +98,14 @@ export const navigationPatterns: StepPattern[] = [
81
98
  const cleanPath = pathCode.replace(/^['`]|['`]$/g, '');
82
99
  const isAbsoluteUrl = /^https?:\/\//.test(cleanPath);
83
100
 
101
+ if (isThen) {
102
+ return {
103
+ templateName: 'route-assertion',
104
+ data: { path: cleanPath },
105
+ comment: `Assert on ${route}`,
106
+ };
107
+ }
108
+
84
109
  return {
85
110
  templateName: 'navigation',
86
111
  data: { baseURL: isAbsoluteUrl ? undefined : context.baseURL, path: cleanPath },
@@ -46,7 +46,7 @@ export interface FigmaRawNode {
46
46
  /** Component set variant properties. */
47
47
  componentPropertyDefinitions?: Record<string, unknown>;
48
48
  /** Variant property values for COMPONENT nodes. */
49
- componentProperties?: Record<string, { value: string; type: string }>;
49
+ componentProperties?: Record<string, { value: string | boolean; type: string }>;
50
50
  /** Bounding box from absoluteBoundingBox. */
51
51
  absoluteBoundingBox?: { x: number; y: number; width: number; height: number };
52
52
  /** Child nodes. */
@@ -28,7 +28,14 @@ const RawNodeSchema: z.ZodType<Record<string, unknown>> = z
28
28
  characters: z.string().optional(),
29
29
  componentPropertyDefinitions: z.record(z.string(), z.unknown()).optional(),
30
30
  componentProperties: z
31
- .record(z.string(), z.object({ value: z.string(), type: z.string() }))
31
+ .record(
32
+ z.string(),
33
+ z.object({
34
+ // Figma returns boolean for type=BOOLEAN, string for TEXT/INSTANCE_SWAP/VARIANT
35
+ value: z.union([z.string(), z.boolean()]),
36
+ type: z.string(),
37
+ }),
38
+ )
32
39
  .optional(),
33
40
  absoluteBoundingBox: z
34
41
  .object({ x: z.number(), y: z.number(), width: z.number(), height: z.number() })
@@ -108,11 +115,11 @@ function filterNode(
108
115
  if (type === 'COMPONENT' || type === 'COMPONENT_SET' || type === 'INSTANCE') {
109
116
  componentName = name;
110
117
  const props = raw['componentProperties'] as
111
- | Record<string, { value: string; type: string }>
118
+ | Record<string, { value: string | boolean; type: string }>
112
119
  | undefined;
113
120
  if (props) {
114
121
  variantProps = Object.fromEntries(
115
- Object.entries(props).map(([k, v]) => [k, v.value]),
122
+ Object.entries(props).map(([k, v]) => [k, String(v.value)]),
116
123
  );
117
124
  }
118
125
  }