@sun-asterisk/sungen 2.6.0 → 2.6.2

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.
Files changed (104) hide show
  1. package/dist/cli/commands/dashboard.d.ts +10 -0
  2. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  3. package/dist/cli/commands/dashboard.js +171 -0
  4. package/dist/cli/commands/dashboard.js.map +1 -0
  5. package/dist/cli/index.js +4 -2
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/dashboard/history-store.d.ts +27 -0
  8. package/dist/dashboard/history-store.d.ts.map +1 -0
  9. package/dist/dashboard/history-store.js +112 -0
  10. package/dist/dashboard/history-store.js.map +1 -0
  11. package/dist/dashboard/html-renderer.d.ts +30 -0
  12. package/dist/dashboard/html-renderer.d.ts.map +1 -0
  13. package/dist/dashboard/html-renderer.js +111 -0
  14. package/dist/dashboard/html-renderer.js.map +1 -0
  15. package/dist/dashboard/snapshot-builder.d.ts +30 -0
  16. package/dist/dashboard/snapshot-builder.d.ts.map +1 -0
  17. package/dist/dashboard/snapshot-builder.js +263 -0
  18. package/dist/dashboard/snapshot-builder.js.map +1 -0
  19. package/dist/dashboard/templates/index.html +287 -0
  20. package/dist/dashboard/types.d.ts +122 -0
  21. package/dist/dashboard/types.d.ts.map +1 -0
  22. package/dist/dashboard/types.js +11 -0
  23. package/dist/dashboard/types.js.map +1 -0
  24. package/dist/exporters/json-exporter.d.ts +25 -0
  25. package/dist/exporters/json-exporter.d.ts.map +1 -0
  26. package/dist/exporters/json-exporter.js +135 -0
  27. package/dist/exporters/json-exporter.js.map +1 -0
  28. package/dist/exporters/playwright-report-parser.d.ts +2 -1
  29. package/dist/exporters/playwright-report-parser.d.ts.map +1 -1
  30. package/dist/exporters/playwright-report-parser.js +12 -5
  31. package/dist/exporters/playwright-report-parser.js.map +1 -1
  32. package/dist/exporters/spec-parser.d.ts.map +1 -1
  33. package/dist/exporters/spec-parser.js +8 -3
  34. package/dist/exporters/spec-parser.js.map +1 -1
  35. package/dist/generators/test-generator/adapters/adapter-interface.d.ts +15 -0
  36. package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
  37. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts +2 -0
  38. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts.map +1 -1
  39. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js.map +1 -1
  40. package/dist/generators/test-generator/adapters/playwright/templates/imports.hbs +2 -1
  41. package/dist/generators/test-generator/adapters/playwright/templates/scenario.hbs +20 -1
  42. package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +84 -4
  43. package/dist/generators/test-generator/code-generator.d.ts +1 -0
  44. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  45. package/dist/generators/test-generator/code-generator.js +76 -6
  46. package/dist/generators/test-generator/code-generator.js.map +1 -1
  47. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
  48. package/dist/generators/test-generator/patterns/interaction-patterns.js +22 -3
  49. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  50. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +1 -1
  51. package/dist/generators/test-generator/patterns/navigation-patterns.js +8 -3
  52. package/dist/generators/test-generator/patterns/navigation-patterns.js.map +1 -1
  53. package/dist/generators/test-generator/template-engine.d.ts +13 -0
  54. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  55. package/dist/generators/test-generator/template-engine.js +1 -1
  56. package/dist/generators/test-generator/template-engine.js.map +1 -1
  57. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  58. package/dist/orchestrator/screen-manager.js +3 -1
  59. package/dist/orchestrator/screen-manager.js.map +1 -1
  60. package/dist/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +70 -10
  61. package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +23 -0
  62. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +70 -10
  63. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +23 -0
  64. package/dist/orchestrator/templates/playwright.config.d.ts.map +1 -1
  65. package/dist/orchestrator/templates/playwright.config.js +9 -1
  66. package/dist/orchestrator/templates/playwright.config.js.map +1 -1
  67. package/dist/orchestrator/templates/playwright.config.ts +11 -1
  68. package/dist/orchestrator/templates/specs-base.d.ts +3 -4
  69. package/dist/orchestrator/templates/specs-base.d.ts.map +1 -1
  70. package/dist/orchestrator/templates/specs-base.js +53 -39
  71. package/dist/orchestrator/templates/specs-base.js.map +1 -1
  72. package/dist/orchestrator/templates/specs-base.ts +55 -45
  73. package/dist/orchestrator/templates/specs-test-data.d.ts.map +1 -1
  74. package/dist/orchestrator/templates/specs-test-data.js +43 -0
  75. package/dist/orchestrator/templates/specs-test-data.js.map +1 -1
  76. package/dist/orchestrator/templates/specs-test-data.ts +47 -0
  77. package/package.json +4 -3
  78. package/src/cli/commands/dashboard.ts +158 -0
  79. package/src/cli/index.ts +4 -2
  80. package/src/dashboard/history-store.ts +86 -0
  81. package/src/dashboard/html-renderer.ts +90 -0
  82. package/src/dashboard/snapshot-builder.ts +273 -0
  83. package/src/dashboard/templates/index.html +287 -0
  84. package/src/dashboard/types.ts +148 -0
  85. package/src/exporters/json-exporter.ts +162 -0
  86. package/src/exporters/playwright-report-parser.ts +12 -5
  87. package/src/exporters/spec-parser.ts +8 -3
  88. package/src/generators/test-generator/adapters/adapter-interface.ts +6 -1
  89. package/src/generators/test-generator/adapters/playwright/playwright-adapter.ts +1 -1
  90. package/src/generators/test-generator/adapters/playwright/templates/imports.hbs +2 -1
  91. package/src/generators/test-generator/adapters/playwright/templates/scenario.hbs +20 -1
  92. package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +84 -4
  93. package/src/generators/test-generator/code-generator.ts +88 -7
  94. package/src/generators/test-generator/patterns/interaction-patterns.ts +25 -3
  95. package/src/generators/test-generator/patterns/navigation-patterns.ts +8 -3
  96. package/src/generators/test-generator/template-engine.ts +5 -2
  97. package/src/orchestrator/screen-manager.ts +3 -1
  98. package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +70 -10
  99. package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +23 -0
  100. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +70 -10
  101. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +23 -0
  102. package/src/orchestrator/templates/playwright.config.ts +11 -1
  103. package/src/orchestrator/templates/specs-base.ts +55 -45
  104. package/src/orchestrator/templates/specs-test-data.ts +47 -0
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * Orchestrate dashboard snapshot construction across all screens/flows.
4
+ *
5
+ * Inputs are read from the same on-disk sources used by `sungen delivery`:
6
+ * qa/screens/<name>/... feature, test-data, selectors, requirements
7
+ * qa/flows/<name>/...
8
+ * specs/generated/<...>/... compiled .spec.ts + per-target test-result.json
9
+ * test-results/results.json global fallback
10
+ *
11
+ * Output is a DashboardSnapshot ready to be embedded in HTML or written as
12
+ * a history entry under qa/dashboard/history/<runId>.json.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.buildDashboardSnapshot = buildDashboardSnapshot;
49
+ exports.listDashboardTargets = listDashboardTargets;
50
+ exports.resolveTargetType = resolveTargetType;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const child_process_1 = require("child_process");
54
+ const feature_parser_1 = require("../exporters/feature-parser");
55
+ const spec_parser_1 = require("../exporters/spec-parser");
56
+ const test_data_resolver_1 = require("../exporters/test-data-resolver");
57
+ const playwright_report_parser_1 = require("../exporters/playwright-report-parser");
58
+ const scenario_merger_1 = require("../exporters/scenario-merger");
59
+ const json_exporter_1 = require("../exporters/json-exporter");
60
+ const package_info_1 = require("../exporters/package-info");
61
+ const types_1 = require("./types");
62
+ function buildDashboardSnapshot(options) {
63
+ const { cwd, targets, env } = options;
64
+ const screens = [];
65
+ for (const target of targets) {
66
+ try {
67
+ const screen = buildOneScreen(cwd, target, env);
68
+ if (screen)
69
+ screens.push(screen);
70
+ }
71
+ catch (err) {
72
+ if (!options.continueOnError)
73
+ throw err;
74
+ // eslint-disable-next-line no-console
75
+ console.warn(`[dashboard] skipping ${target.name}: ${err.message}`);
76
+ }
77
+ }
78
+ const now = new Date();
79
+ return {
80
+ version: types_1.SNAPSHOT_VERSION,
81
+ runId: makeRunId(now),
82
+ generatedAt: toLocalIso(now),
83
+ environment: collectEnvironment(cwd, env),
84
+ summary: aggregateSummary(screens),
85
+ screens: screens.sort((a, b) => a.name.localeCompare(b.name)),
86
+ };
87
+ }
88
+ // ----------------------------------------------------------------------------
89
+ // Per-target build
90
+ // ----------------------------------------------------------------------------
91
+ function buildOneScreen(cwd, target, env) {
92
+ const base = qaDir(cwd, target);
93
+ const genBase = generatedDir(cwd, target);
94
+ const featureFile = path.join(base, 'features', `${target.name}.feature`);
95
+ const testDataFile = path.join(base, 'test-data', `${target.name}.yaml`);
96
+ const specFile = path.join(genBase, `${target.name}.spec.ts`);
97
+ const specMdFile = path.join(base, 'requirements', 'spec.md');
98
+ const resultsFile = resolveResultsPath(cwd, target);
99
+ if (!fs.existsSync(featureFile))
100
+ return null;
101
+ const feature = (0, feature_parser_1.parseFeatureMetadata)(featureFile);
102
+ const spec = fs.existsSync(specFile)
103
+ ? (0, spec_parser_1.parseSpecFile)(specFile)
104
+ : { tests: [] };
105
+ const testData = fs.existsSync(testDataFile) ? (0, test_data_resolver_1.loadTestData)(testDataFile) : {};
106
+ const results = resultsFile ? (0, playwright_report_parser_1.loadPlaywrightReport)(resultsFile) : null;
107
+ const merged = (0, scenario_merger_1.mergeFeatureAndSpec)(feature, spec);
108
+ const label = target.isFlow ? `flow/${target.name}` : target.name;
109
+ const specLink = fs.existsSync(specMdFile) ? path.relative(cwd, specMdFile) : undefined;
110
+ return (0, json_exporter_1.buildScreenSnapshot)({
111
+ screen: label,
112
+ isFlow: target.isFlow,
113
+ featureName: feature.featureName,
114
+ featurePath: feature.featurePath,
115
+ specLink,
116
+ merged,
117
+ testData,
118
+ results,
119
+ env,
120
+ });
121
+ }
122
+ // ----------------------------------------------------------------------------
123
+ // Aggregate summary across all screens
124
+ // ----------------------------------------------------------------------------
125
+ function aggregateSummary(screens) {
126
+ const summary = {
127
+ total: 0,
128
+ passed: 0,
129
+ failed: 0,
130
+ pending: 0,
131
+ na: 0,
132
+ notCompiled: 0,
133
+ passRate: 0,
134
+ byPriority: { Critical: 0, High: 0, Normal: 0, Low: 0 },
135
+ byCategory: { Accessing: 0, GUI: 0, Function: 0 },
136
+ byType: { Auto: 0, Manual: 0, 'Not compiled': 0 },
137
+ };
138
+ for (const screen of screens) {
139
+ summary.total += screen.summary.total;
140
+ summary.passed += screen.summary.passed;
141
+ summary.failed += screen.summary.failed;
142
+ summary.pending += screen.summary.pending;
143
+ summary.na += screen.summary.na;
144
+ summary.notCompiled += screen.summary.notCompiled;
145
+ for (const s of screen.scenarios) {
146
+ bumpKey(summary.byPriority, s.priority);
147
+ bumpKey(summary.byCategory, s.category2);
148
+ bumpKey(summary.byType, s.type);
149
+ }
150
+ }
151
+ const executed = summary.passed + summary.failed;
152
+ summary.passRate = executed > 0 ? summary.passed / executed : 0;
153
+ return summary;
154
+ }
155
+ function bumpKey(record, key) {
156
+ record[key] = (record[key] ?? 0) + 1;
157
+ }
158
+ // ----------------------------------------------------------------------------
159
+ // Path helpers (mirror delivery.ts to stay consistent)
160
+ // ----------------------------------------------------------------------------
161
+ function qaDir(cwd, target) {
162
+ return path.join(cwd, 'qa', target.isFlow ? 'flows' : 'screens', target.name);
163
+ }
164
+ function generatedDir(cwd, target) {
165
+ return target.isFlow
166
+ ? path.join(cwd, 'specs', 'generated', 'flows', target.name)
167
+ : path.join(cwd, 'specs', 'generated', target.name);
168
+ }
169
+ function resolveResultsPath(cwd, target) {
170
+ const genDir = generatedDir(cwd, target);
171
+ const perTarget = path.join(genDir, `${target.name}-test-result.json`);
172
+ if (fs.existsSync(perTarget))
173
+ return perTarget;
174
+ const global = path.join(cwd, 'test-results', 'results.json');
175
+ if (fs.existsSync(global))
176
+ return global;
177
+ return null;
178
+ }
179
+ // ----------------------------------------------------------------------------
180
+ // Discovery (also used by CLI)
181
+ // ----------------------------------------------------------------------------
182
+ function listDashboardTargets(cwd) {
183
+ const targets = [];
184
+ const screensDir = path.join(cwd, 'qa', 'screens');
185
+ if (fs.existsSync(screensDir)) {
186
+ for (const d of fs.readdirSync(screensDir, { withFileTypes: true })) {
187
+ if (d.isDirectory())
188
+ targets.push({ name: d.name, isFlow: false });
189
+ }
190
+ }
191
+ const flowsDir = path.join(cwd, 'qa', 'flows');
192
+ if (fs.existsSync(flowsDir)) {
193
+ for (const d of fs.readdirSync(flowsDir, { withFileTypes: true })) {
194
+ if (d.isDirectory())
195
+ targets.push({ name: d.name, isFlow: true });
196
+ }
197
+ }
198
+ return targets.sort((a, b) => a.name.localeCompare(b.name));
199
+ }
200
+ function resolveTargetType(cwd, name) {
201
+ if (fs.existsSync(path.join(cwd, 'qa', 'flows', name))) {
202
+ return { name, isFlow: true };
203
+ }
204
+ return { name, isFlow: false };
205
+ }
206
+ // ----------------------------------------------------------------------------
207
+ // Run ID + environment metadata (Vietnam Indochina Time, UTC+7, no DST)
208
+ // ----------------------------------------------------------------------------
209
+ const VN_OFFSET_MS = 7 * 60 * 60 * 1000;
210
+ /**
211
+ * Filename-safe ISO timestamp in Vietnam time (UTC+7).
212
+ * Example: 2026-04-29T08-13-53+0700
213
+ *
214
+ * Colons in HH:MM:SS are replaced with `-` (filename-safe on Windows too).
215
+ * The `+0700` suffix makes the offset explicit so consumers don't need
216
+ * to assume a default timezone.
217
+ */
218
+ function makeRunId(now) {
219
+ const vn = new Date(now.getTime() + VN_OFFSET_MS);
220
+ const yyyy = vn.getUTCFullYear();
221
+ const MM = String(vn.getUTCMonth() + 1).padStart(2, '0');
222
+ const dd = String(vn.getUTCDate()).padStart(2, '0');
223
+ const HH = String(vn.getUTCHours()).padStart(2, '0');
224
+ const mm = String(vn.getUTCMinutes()).padStart(2, '0');
225
+ const ss = String(vn.getUTCSeconds()).padStart(2, '0');
226
+ return `${yyyy}-${MM}-${dd}T${HH}-${mm}-${ss}+0700`;
227
+ }
228
+ /**
229
+ * Full ISO 8601 timestamp in Vietnam time, with milliseconds and `+07:00` offset.
230
+ * Example: 2026-04-29T08:13:53.495+07:00
231
+ */
232
+ function toLocalIso(now) {
233
+ const vn = new Date(now.getTime() + VN_OFFSET_MS);
234
+ const yyyy = vn.getUTCFullYear();
235
+ const MM = String(vn.getUTCMonth() + 1).padStart(2, '0');
236
+ const dd = String(vn.getUTCDate()).padStart(2, '0');
237
+ const HH = String(vn.getUTCHours()).padStart(2, '0');
238
+ const mm = String(vn.getUTCMinutes()).padStart(2, '0');
239
+ const ss = String(vn.getUTCSeconds()).padStart(2, '0');
240
+ const ms = String(vn.getUTCMilliseconds()).padStart(3, '0');
241
+ return `${yyyy}-${MM}-${dd}T${HH}:${mm}:${ss}.${ms}+07:00`;
242
+ }
243
+ function collectEnvironment(cwd, env) {
244
+ let gitBranch;
245
+ let gitSha;
246
+ try {
247
+ gitBranch = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { cwd, encoding: 'utf-8' }).trim();
248
+ }
249
+ catch { /* ignore */ }
250
+ try {
251
+ gitSha = (0, child_process_1.execSync)('git rev-parse --short HEAD', { cwd, encoding: 'utf-8' }).trim();
252
+ }
253
+ catch { /* ignore */ }
254
+ return {
255
+ baseURL: env.baseURL,
256
+ projectName: env.projectName,
257
+ executor: env.executor,
258
+ sungenVersion: (0, package_info_1.getPackageVersion)(),
259
+ gitBranch,
260
+ gitSha,
261
+ };
262
+ }
263
+ //# sourceMappingURL=snapshot-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-builder.js","sourceRoot":"","sources":["../../src/dashboard/snapshot-builder.ts"],"names":[],"mappings":"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"}