@sun-asterisk/sungen 3.1.2-beta.93 → 3.1.2-beta.98

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 (150) hide show
  1. package/README.md +4 -428
  2. package/dist/capabilities/builtins.d.ts +31 -0
  3. package/dist/capabilities/builtins.d.ts.map +1 -0
  4. package/dist/capabilities/builtins.js +84 -0
  5. package/dist/capabilities/builtins.js.map +1 -0
  6. package/dist/capabilities/context-router.d.ts +34 -0
  7. package/dist/capabilities/context-router.d.ts.map +1 -0
  8. package/dist/capabilities/context-router.js +49 -0
  9. package/dist/capabilities/context-router.js.map +1 -0
  10. package/dist/capabilities/context.d.ts +51 -0
  11. package/dist/capabilities/context.d.ts.map +1 -0
  12. package/dist/capabilities/context.js +17 -0
  13. package/dist/capabilities/context.js.map +1 -0
  14. package/dist/capabilities/discover.d.ts +2 -0
  15. package/dist/capabilities/discover.d.ts.map +1 -0
  16. package/dist/capabilities/discover.js +48 -0
  17. package/dist/capabilities/discover.js.map +1 -0
  18. package/dist/capabilities/registry.d.ts +90 -0
  19. package/dist/capabilities/registry.d.ts.map +1 -0
  20. package/dist/capabilities/registry.js +43 -0
  21. package/dist/capabilities/registry.js.map +1 -0
  22. package/dist/capabilities/sensor.d.ts +49 -0
  23. package/dist/capabilities/sensor.d.ts.map +1 -0
  24. package/dist/capabilities/sensor.js +3 -0
  25. package/dist/capabilities/sensor.js.map +1 -0
  26. package/dist/cli/commands/generate.d.ts.map +1 -1
  27. package/dist/cli/commands/generate.js +7 -3
  28. package/dist/cli/commands/generate.js.map +1 -1
  29. package/dist/cli/index.js +10 -1
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/generators/test-generator/adapters/adapter-interface.d.ts +1 -0
  32. package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
  33. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts +1 -0
  34. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts.map +1 -1
  35. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js.map +1 -1
  36. package/dist/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
  37. package/dist/generators/test-generator/code-generator.d.ts +11 -9
  38. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  39. package/dist/generators/test-generator/code-generator.js +53 -76
  40. package/dist/generators/test-generator/code-generator.js.map +1 -1
  41. package/dist/generators/test-generator/patterns/index.d.ts +0 -10
  42. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  43. package/dist/generators/test-generator/patterns/index.js +10 -47
  44. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  45. package/dist/generators/test-generator/template-engine.d.ts +1 -0
  46. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  47. package/dist/generators/test-generator/template-engine.js +1 -1
  48. package/dist/generators/test-generator/template-engine.js.map +1 -1
  49. package/dist/harness/annotation-overrides.d.ts +9 -0
  50. package/dist/harness/annotation-overrides.d.ts.map +1 -0
  51. package/dist/harness/annotation-overrides.js +36 -0
  52. package/dist/harness/annotation-overrides.js.map +1 -0
  53. package/dist/harness/audit.d.ts.map +1 -1
  54. package/dist/harness/audit.js +35 -7
  55. package/dist/harness/audit.js.map +1 -1
  56. package/dist/harness/catalog/drivers.yaml +35 -12
  57. package/dist/harness/parse.d.ts +1 -0
  58. package/dist/harness/parse.d.ts.map +1 -1
  59. package/dist/harness/parse.js +13 -4
  60. package/dist/harness/parse.js.map +1 -1
  61. package/dist/index.d.ts +20 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +32 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +1 -0
  66. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +1 -0
  67. package/dist/orchestrator/templates/specs-api.d.ts +19 -0
  68. package/dist/orchestrator/templates/specs-api.d.ts.map +1 -0
  69. package/dist/orchestrator/templates/specs-api.js +128 -0
  70. package/dist/orchestrator/templates/specs-api.js.map +1 -0
  71. package/dist/orchestrator/templates/specs-api.ts +101 -0
  72. package/package.json +7 -30
  73. package/src/capabilities/builtins.ts +85 -0
  74. package/src/capabilities/context-router.ts +66 -0
  75. package/src/capabilities/context.ts +46 -0
  76. package/src/capabilities/discover.ts +42 -0
  77. package/src/capabilities/registry.ts +111 -0
  78. package/src/capabilities/sensor.ts +47 -0
  79. package/src/cli/commands/generate.ts +7 -3
  80. package/src/cli/index.ts +10 -1
  81. package/src/generators/test-generator/adapters/adapter-interface.ts +1 -1
  82. package/src/generators/test-generator/adapters/playwright/playwright-adapter.ts +1 -1
  83. package/src/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
  84. package/src/generators/test-generator/code-generator.ts +51 -74
  85. package/src/generators/test-generator/patterns/index.ts +9 -35
  86. package/src/generators/test-generator/template-engine.ts +2 -2
  87. package/src/harness/annotation-overrides.ts +25 -0
  88. package/src/harness/audit.ts +37 -8
  89. package/src/harness/catalog/drivers.yaml +35 -12
  90. package/src/harness/parse.ts +7 -2
  91. package/src/index.ts +30 -0
  92. package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +1 -0
  93. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +1 -0
  94. package/src/orchestrator/templates/specs-api.ts +101 -0
  95. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts +0 -7
  96. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +0 -1
  97. package/dist/generators/test-generator/patterns/assertion-patterns.js +0 -626
  98. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +0 -1
  99. package/dist/generators/test-generator/patterns/capture-patterns.d.ts +0 -21
  100. package/dist/generators/test-generator/patterns/capture-patterns.d.ts.map +0 -1
  101. package/dist/generators/test-generator/patterns/capture-patterns.js +0 -87
  102. package/dist/generators/test-generator/patterns/capture-patterns.js.map +0 -1
  103. package/dist/generators/test-generator/patterns/database-patterns.d.ts +0 -6
  104. package/dist/generators/test-generator/patterns/database-patterns.d.ts.map +0 -1
  105. package/dist/generators/test-generator/patterns/database-patterns.js +0 -95
  106. package/dist/generators/test-generator/patterns/database-patterns.js.map +0 -1
  107. package/dist/generators/test-generator/patterns/form-patterns.d.ts +0 -6
  108. package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +0 -1
  109. package/dist/generators/test-generator/patterns/form-patterns.js +0 -160
  110. package/dist/generators/test-generator/patterns/form-patterns.js.map +0 -1
  111. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +0 -6
  112. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +0 -1
  113. package/dist/generators/test-generator/patterns/interaction-patterns.js +0 -433
  114. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +0 -1
  115. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +0 -7
  116. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +0 -1
  117. package/dist/generators/test-generator/patterns/keyboard-patterns.js +0 -47
  118. package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +0 -1
  119. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts +0 -6
  120. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +0 -1
  121. package/dist/generators/test-generator/patterns/navigation-patterns.js +0 -125
  122. package/dist/generators/test-generator/patterns/navigation-patterns.js.map +0 -1
  123. package/dist/generators/test-generator/patterns/scope-patterns.d.ts +0 -7
  124. package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +0 -1
  125. package/dist/generators/test-generator/patterns/scope-patterns.js +0 -36
  126. package/dist/generators/test-generator/patterns/scope-patterns.js.map +0 -1
  127. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +0 -7
  128. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +0 -1
  129. package/dist/generators/test-generator/patterns/scroll-patterns.js +0 -25
  130. package/dist/generators/test-generator/patterns/scroll-patterns.js.map +0 -1
  131. package/dist/generators/test-generator/patterns/setup-patterns.d.ts +0 -6
  132. package/dist/generators/test-generator/patterns/setup-patterns.d.ts.map +0 -1
  133. package/dist/generators/test-generator/patterns/setup-patterns.js +0 -72
  134. package/dist/generators/test-generator/patterns/setup-patterns.js.map +0 -1
  135. package/dist/generators/test-generator/patterns/table-patterns.d.ts +0 -19
  136. package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +0 -1
  137. package/dist/generators/test-generator/patterns/table-patterns.js +0 -239
  138. package/dist/generators/test-generator/patterns/table-patterns.js.map +0 -1
  139. package/docs/orchestration-spec.md +0 -267
  140. package/src/generators/test-generator/patterns/assertion-patterns.ts +0 -691
  141. package/src/generators/test-generator/patterns/capture-patterns.ts +0 -97
  142. package/src/generators/test-generator/patterns/database-patterns.ts +0 -96
  143. package/src/generators/test-generator/patterns/form-patterns.ts +0 -167
  144. package/src/generators/test-generator/patterns/interaction-patterns.ts +0 -465
  145. package/src/generators/test-generator/patterns/keyboard-patterns.ts +0 -51
  146. package/src/generators/test-generator/patterns/navigation-patterns.ts +0 -140
  147. package/src/generators/test-generator/patterns/scope-patterns.ts +0 -40
  148. package/src/generators/test-generator/patterns/scroll-patterns.ts +0 -27
  149. package/src/generators/test-generator/patterns/setup-patterns.ts +0 -76
  150. package/src/generators/test-generator/patterns/table-patterns.ts +0 -279
@@ -0,0 +1,101 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * Sungen API Driver — runtime helper (auto-generated into specs/api.ts).
4
+ *
5
+ * Runs a catalog-defined HTTP request and returns { status, ok, body, headers } — bound to a
6
+ * `{{name}}` variable by the `@api:<name>` annotation, asserted with `expect {{name.status}} …` /
7
+ * `{{name.body.<path>}}`. Base URL + auth come from a `kind: api` datasource in datasources.yaml,
8
+ * with `${VAR}` resolved from .env.qa / process.env — never inline.
9
+ *
10
+ * Safety: a datasource flagged `env: production` is refused unless SUNGEN_ALLOW_PROD=1.
11
+ * DO NOT EDIT — regenerated by `sungen generate`.
12
+ */
13
+ import * as fs from 'fs';
14
+ import * as path from 'path';
15
+
16
+ interface ApiDataSource {
17
+ kind?: string;
18
+ base_url?: string;
19
+ baseUrl?: string;
20
+ env?: string;
21
+ headers?: Record<string, string>;
22
+ timeout_ms?: number;
23
+ }
24
+
25
+ function loadEnvQa(): void {
26
+ for (const name of ['.env.qa', `.env.qa.${process.env.SUNGEN_ENV || ''}`]) {
27
+ const p = path.join(process.cwd(), name);
28
+ if (!name.endsWith('.') && fs.existsSync(p)) {
29
+ for (const line of fs.readFileSync(p, 'utf8').split('\n')) {
30
+ const m = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*?)\s*$/);
31
+ if (m && process.env[m[1]] === undefined) process.env[m[1]] = m[2].replace(/^["']|["']$/g, '');
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ function loadConfig(): Record<string, ApiDataSource> {
38
+ loadEnvQa();
39
+ const file = [path.join(process.cwd(), 'datasources.yaml'), path.join(process.cwd(), 'qa', 'datasources.yaml')].find((f) => fs.existsSync(f));
40
+ if (!file) throw new Error('API Driver: no datasources.yaml found (project root or qa/).');
41
+ const raw = fs.readFileSync(file, 'utf8').replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_, k) => process.env[k] ?? '');
42
+ const { parse } = require('yaml');
43
+ const doc = parse(raw) || {};
44
+ return doc.datasources || {};
45
+ }
46
+
47
+ function substitute(text: string, params: Record<string, any>): string {
48
+ return text.replace(/:([A-Za-z_][A-Za-z0-9_]*)/g, (_m, p) => encodeURIComponent(String(params[p] ?? '')));
49
+ }
50
+
51
+ class ApiClient {
52
+ private configs: Record<string, ApiDataSource> | null = null;
53
+
54
+ private cfg(name?: string): { key: string; conf: ApiDataSource } {
55
+ if (!this.configs) this.configs = loadConfig();
56
+ const key = name || Object.keys(this.configs).find((k) => (this.configs![k].kind || 'api') === 'api') || Object.keys(this.configs)[0];
57
+ const conf = this.configs[key];
58
+ if (!conf) throw new Error(`API Driver: datasource "${key}" not found in datasources.yaml`);
59
+ if (conf.env === 'production' && process.env.SUNGEN_ALLOW_PROD !== '1') {
60
+ throw new Error(`API Driver: datasource "${key}" is env: production — refused (set SUNGEN_ALLOW_PROD=1 to override).`);
61
+ }
62
+ return { key, conf };
63
+ }
64
+
65
+ /** Run a catalog request and return the response. `req` is embedded at compile time; `params` bind at runtime. */
66
+ async call(
67
+ label: string,
68
+ req: { method: string; path: string; body?: unknown; datasource?: string },
69
+ params: Record<string, any> = {},
70
+ ): Promise<{ status: number; ok: boolean; body: any; headers: Record<string, string> }> {
71
+ const { conf } = this.cfg(req.datasource);
72
+ const base = (conf.base_url || conf.baseUrl || '').replace(/\/$/, '');
73
+ if (!base) throw new Error(`API Driver: ${label} — datasource has no base_url (set it in .env.qa).`);
74
+ const url = base + substitute(req.path, params);
75
+
76
+ let body: string | undefined;
77
+ const headers: Record<string, string> = { ...(conf.headers || {}) };
78
+ if (req.body !== undefined && req.body !== null) {
79
+ const resolved = JSON.parse(JSON.stringify(req.body).replace(/":([A-Za-z_][A-Za-z0-9_]*)"/g, (_m, p) => JSON.stringify(params[p] ?? null)));
80
+ body = JSON.stringify(resolved);
81
+ if (!headers['content-type'] && !headers['Content-Type']) headers['content-type'] = 'application/json';
82
+ }
83
+
84
+ const controller = new AbortController();
85
+ const timer = setTimeout(() => controller.abort(), conf.timeout_ms ?? 15000);
86
+ let res: Response;
87
+ try {
88
+ res = await fetch(url, { method: req.method, headers, body, signal: controller.signal });
89
+ } finally {
90
+ clearTimeout(timer);
91
+ }
92
+ const text = await res.text();
93
+ let parsed: any = text;
94
+ try { parsed = text ? JSON.parse(text) : null; } catch { /* non-JSON → keep text */ }
95
+ const outHeaders: Record<string, string> = {};
96
+ res.headers.forEach((v, k) => { outHeaders[k] = v; });
97
+ return { status: res.status, ok: res.ok, body: parsed, headers: outHeaders };
98
+ }
99
+ }
100
+
101
+ export const api = new ApiClient();
@@ -1,7 +0,0 @@
1
- import { StepPattern } from './types';
2
- /**
3
- * Assertion patterns: visibility, text content, state, attributes
4
- * Uses template engine for framework-agnostic code generation
5
- */
6
- export declare const assertionPatterns: StepPattern[];
7
- //# sourceMappingURL=assertion-patterns.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assertion-patterns.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/patterns/assertion-patterns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoB,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,EA2qB1C,CAAC"}