@sun-asterisk/sungen 3.1.2-beta.105 → 3.1.2-beta.107

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.
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":"AAoCA,wBAAgB,+BAA+B,IAAI,IAAI,CAKtD"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":"AA6CA,wBAAgB,+BAA+B,IAAI,IAAI,CAKtD"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.discoverAndRegisterCapabilities = discoverAndRegisterCapabilities;
4
37
  /**
@@ -16,6 +49,8 @@ exports.discoverAndRegisterCapabilities = discoverAndRegisterCapabilities;
16
49
  * A driver that isn't installed is simply skipped (capabilities are opt-in). Errors thrown *inside* a
17
50
  * present driver propagate — only a genuinely absent package is swallowed (resolve-then-require).
18
51
  */
52
+ const module_1 = require("module");
53
+ const path = __importStar(require("path"));
19
54
  const registry_1 = require("./registry");
20
55
  const builtins_1 = require("./builtins");
21
56
  /**
@@ -25,16 +60,32 @@ const builtins_1 = require("./builtins");
25
60
  */
26
61
  const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api'];
27
62
  function loadExternalDriver(name) {
28
- try {
29
- require.resolve(name);
30
- }
31
- catch {
32
- return; // not installed capabilities are opt-in, so skip silently
63
+ // Resolve from the user's PROJECT first, then from core's own location. Opt-in drivers
64
+ // (`sungen capability add db|api`) install into the PROJECT's node_modules — a globally-installed
65
+ // core (`npm i -g`) wouldn't see them via a core-anchored `require`. The bundled @sungen/driver-ui
66
+ // is a core dependency (co-located with core), so the second anchor finds it.
67
+ for (const anchor of [path.join(process.cwd(), 'package.json'), __filename]) {
68
+ let req;
69
+ try {
70
+ req = (0, module_1.createRequire)(anchor);
71
+ }
72
+ catch {
73
+ continue;
74
+ }
75
+ let resolved;
76
+ try {
77
+ resolved = req.resolve(name);
78
+ }
79
+ catch {
80
+ continue;
81
+ } // not installed at this anchor → try next
82
+ const mod = req(resolved); // present: let any error thrown INSIDE the driver propagate (don't mask)
83
+ const register = mod?.sungenDriver?.register ?? mod?.register;
84
+ if (typeof register === 'function')
85
+ register(registry_1.capabilityRegistry);
86
+ return;
33
87
  }
34
- const mod = require(name); // present: let any error thrown inside the driver propagate (don't mask)
35
- const register = mod?.sungenDriver?.register ?? mod?.register;
36
- if (typeof register === 'function')
37
- register(registry_1.capabilityRegistry);
88
+ // not installed at any anchor capabilities are opt-in, so skip silently
38
89
  }
39
90
  function discoverAndRegisterCapabilities() {
40
91
  if (registry_1.capabilityRegistry.isPopulated())
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":";;AAoCA,0EAKC;AAzCD;;;;;;;;;;;;;;GAcG;AACH,yCAAgD;AAChD,yCAAmE;AAEnE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;AAE1F,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,4DAA4D;IACtE,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,yEAAyE;IACpG,MAAM,QAAQ,GAAyD,GAAG,EAAE,YAAY,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,CAAC;IACpH,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,QAAQ,CAAC,6BAAkB,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,+BAA+B;IAC7C,IAAI,6BAAkB,CAAC,WAAW,EAAE;QAAE,OAAO;IAC7C,KAAK,MAAM,IAAI,IAAI,gBAAgB;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;IAC3G,KAAK,MAAM,MAAM,IAAI,wBAAa;QAAE,MAAM,CAAC,QAAQ,CAAC,6BAAkB,CAAC,CAAC,CAAC,4BAA4B;IACrG,IAAA,iCAAsB,EAAC,6BAAkB,CAAC,CAAC,CAAC,iDAAiD;AAC/F,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/capabilities/discover.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,0EAKC;AAlDD;;;;;;;;;;;;;;GAcG;AACH,mCAAuC;AACvC,2CAA6B;AAC7B,yCAAgD;AAChD,yCAAmE;AAEnE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;AAE1F,SAAS,kBAAkB,CAAC,IAAY;IACtC,uFAAuF;IACvF,kGAAkG;IAClG,mGAAmG;IACnG,8EAA8E;IAC9E,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5E,IAAI,GAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,GAAG,GAAG,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QACxD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC,CAAC,0CAA0C;QACpG,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,yEAAyE;QACpG,MAAM,QAAQ,GAAyD,GAAG,EAAE,YAAY,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,CAAC;QACpH,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,QAAQ,CAAC,6BAAkB,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,0EAA0E;AAC5E,CAAC;AAED,SAAgB,+BAA+B;IAC7C,IAAI,6BAAkB,CAAC,WAAW,EAAE;QAAE,OAAO;IAC7C,KAAK,MAAM,IAAI,IAAI,gBAAgB;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;IAC3G,KAAK,MAAM,MAAM,IAAI,wBAAa;QAAE,MAAM,CAAC,QAAQ,CAAC,6BAAkB,CAAC,CAAC,CAAC,4BAA4B;IACrG,IAAA,iCAAsB,EAAC,6BAAkB,CAAC,CAAC,CAAC,iDAAiD;AAC/F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6IhE"}
1
+ {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJhE"}
@@ -35,11 +35,39 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerCapabilityCommand = registerCapabilityCommand;
37
37
  const child_process_1 = require("child_process");
38
+ const module_1 = require("module");
38
39
  const fs = __importStar(require("fs"));
39
40
  const path = __importStar(require("path"));
40
41
  const capability_1 = require("../../harness/capability");
41
42
  const capability_plan_1 = require("../../harness/capability-plan");
42
43
  const adapters_1 = require("../../generators/test-generator/adapters");
44
+ /** The running CLI's (core) version — opt-in drivers install in lockstep with it (not `@latest`). */
45
+ function coreVersion() {
46
+ try {
47
+ return require('../../../package.json').version || 'latest';
48
+ }
49
+ catch {
50
+ return 'latest';
51
+ }
52
+ }
53
+ /**
54
+ * Verify a capability driver (db/api/…) installed into the PROJECT exposes the capability SPI entry
55
+ * (`sungenDriver.register`). Resolved from the project's node_modules so it works with a globally
56
+ * installed core. Capability drivers are NOT codegen adapters — don't route them through loadDriver.
57
+ */
58
+ function verifyCapabilityDriver(pkg, cwd) {
59
+ let mod;
60
+ try {
61
+ mod = (0, module_1.createRequire)(path.join(cwd, 'package.json'))(pkg);
62
+ }
63
+ catch {
64
+ throw new Error(`${pkg} is not resolvable from this project — did "npm install -D ${pkg}" succeed, and is there a package.json here?`);
65
+ }
66
+ const register = mod?.sungenDriver?.register ?? mod?.register;
67
+ if (typeof register !== 'function') {
68
+ throw new Error(`${pkg} is installed but is not a sungen capability driver (missing sungenDriver.register).`);
69
+ }
70
+ }
43
71
  function findScreenDir(name) {
44
72
  const s = path.join(process.cwd(), 'qa', 'screens', name);
45
73
  if (fs.existsSync(s))
@@ -145,17 +173,29 @@ function registerCapabilityCommand(program) {
145
173
  const adapterName = meta.adapter || meta.id;
146
174
  const bundled = adapters_1.adapterRegistry.hasAdapter(adapterName); // e.g. `web` is bundled in Phase 2a
147
175
  if (!bundled && !o.skipInstall) {
148
- console.log(`📦 Installing ${meta.package} (dev dependency)...`);
149
- const r = (0, child_process_1.spawnSync)('npm', ['install', '-D', meta.package], { stdio: 'inherit', shell: true });
176
+ // Pin the driver to the RUNNING core's exact version (lockstep). Without this, plain
177
+ // `npm install @sungen/driver-x` resolves the package's `latest` dist-tag which on a
178
+ // beta channel can lag (e.g. a prerelease first-published-as-latest), pulling a driver
179
+ // whose core dep resolves to the wrong @sun-asterisk/sungen and fails to load.
180
+ const spec = `${meta.package}@${coreVersion()}`;
181
+ console.log(`📦 Installing ${spec} (dev dependency)...`);
182
+ const r = (0, child_process_1.spawnSync)('npm', ['install', '-D', spec], { stdio: 'inherit', shell: true });
150
183
  if (r.status !== 0)
151
- throw new Error(`npm install -D ${meta.package} failed.`);
184
+ throw new Error(`npm install -D ${spec} failed.`);
152
185
  }
153
186
  else if (bundled) {
154
187
  console.log(`✓ ${driver} is built-in (no install needed).`);
155
188
  }
156
- // Verify it can load (skip for bundled — already registered).
189
+ // Verify it loaded (skip for bundled — already registered). Two driver shapes:
190
+ // - platform driver (web/mobile): a codegen adapter, loaded via the adapter registry (mod.activate)
191
+ // - capability driver (db/api/…): a capability-SPI package (mod.sungenDriver.register) — NOT an adapter
157
192
  if (!bundled) {
158
- adapters_1.adapterRegistry.loadDriver(adapterName, meta.package, cwd); // throws if not loadable
193
+ if (meta.kind === 'platform') {
194
+ adapters_1.adapterRegistry.loadDriver(adapterName, meta.package, cwd); // throws if not loadable
195
+ }
196
+ else {
197
+ verifyCapabilityDriver(meta.package, cwd); // capability SPI entry, resolved from the project
198
+ }
159
199
  }
160
200
  const profile = (0, capability_1.readCapabilities)(cwd);
161
201
  const enabled = Array.from(new Set([...profile.enabled, driver]));
@@ -1 +1 @@
1
- {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.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": "3.1.2-beta.105",
3
+ "version": "3.1.2-beta.107",
4
4
  "description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -33,7 +33,7 @@
33
33
  "node": ">=18.0.0"
34
34
  },
35
35
  "dependencies": {
36
- "@sungen/driver-ui": "3.1.2-beta.105",
36
+ "@sungen/driver-ui": "3.1.2-beta.107",
37
37
  "@anthropic-ai/sdk": "^0.71.0",
38
38
  "@babel/parser": "^7.28.5",
39
39
  "@babel/traverse": "^7.28.5",
@@ -13,6 +13,8 @@
13
13
  * A driver that isn't installed is simply skipped (capabilities are opt-in). Errors thrown *inside* a
14
14
  * present driver propagate — only a genuinely absent package is swallowed (resolve-then-require).
15
15
  */
16
+ import { createRequire } from 'module';
17
+ import * as path from 'path';
16
18
  import { capabilityRegistry } from './registry';
17
19
  import { LOCAL_DRIVERS, registerCoreCapability } from './builtins';
18
20
 
@@ -24,14 +26,21 @@ import { LOCAL_DRIVERS, registerCoreCapability } from './builtins';
24
26
  const EXTERNAL_DRIVERS = ['@sungen/driver-ui', '@sungen/driver-db', '@sungen/driver-api'];
25
27
 
26
28
  function loadExternalDriver(name: string): void {
27
- try {
28
- require.resolve(name);
29
- } catch {
30
- return; // not installed capabilities are opt-in, so skip silently
29
+ // Resolve from the user's PROJECT first, then from core's own location. Opt-in drivers
30
+ // (`sungen capability add db|api`) install into the PROJECT's node_modules — a globally-installed
31
+ // core (`npm i -g`) wouldn't see them via a core-anchored `require`. The bundled @sungen/driver-ui
32
+ // is a core dependency (co-located with core), so the second anchor finds it.
33
+ for (const anchor of [path.join(process.cwd(), 'package.json'), __filename]) {
34
+ let req: NodeRequire;
35
+ try { req = createRequire(anchor); } catch { continue; }
36
+ let resolved: string;
37
+ try { resolved = req.resolve(name); } catch { continue; } // not installed at this anchor → try next
38
+ const mod = req(resolved); // present: let any error thrown INSIDE the driver propagate (don't mask)
39
+ const register: ((r: typeof capabilityRegistry) => void) | undefined = mod?.sungenDriver?.register ?? mod?.register;
40
+ if (typeof register === 'function') register(capabilityRegistry);
41
+ return;
31
42
  }
32
- const mod = require(name); // present: let any error thrown inside the driver propagate (don't mask)
33
- const register: ((r: typeof capabilityRegistry) => void) | undefined = mod?.sungenDriver?.register ?? mod?.register;
34
- if (typeof register === 'function') register(capabilityRegistry);
43
+ // not installed at any anchor capabilities are opt-in, so skip silently
35
44
  }
36
45
 
37
46
  export function discoverAndRegisterCapabilities(): void {
@@ -1,5 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import { spawnSync } from 'child_process';
3
+ import { createRequire } from 'module';
3
4
  import * as fs from 'fs';
4
5
  import * as path from 'path';
5
6
  import {
@@ -8,6 +9,29 @@ import {
8
9
  import { buildPlan, MANUAL_REASONS } from '../../harness/capability-plan';
9
10
  import { adapterRegistry } from '../../generators/test-generator/adapters';
10
11
 
12
+ /** The running CLI's (core) version — opt-in drivers install in lockstep with it (not `@latest`). */
13
+ function coreVersion(): string {
14
+ try { return require('../../../package.json').version || 'latest'; } catch { return 'latest'; }
15
+ }
16
+
17
+ /**
18
+ * Verify a capability driver (db/api/…) installed into the PROJECT exposes the capability SPI entry
19
+ * (`sungenDriver.register`). Resolved from the project's node_modules so it works with a globally
20
+ * installed core. Capability drivers are NOT codegen adapters — don't route them through loadDriver.
21
+ */
22
+ function verifyCapabilityDriver(pkg: string, cwd: string): void {
23
+ let mod: any;
24
+ try {
25
+ mod = createRequire(path.join(cwd, 'package.json'))(pkg);
26
+ } catch {
27
+ throw new Error(`${pkg} is not resolvable from this project — did "npm install -D ${pkg}" succeed, and is there a package.json here?`);
28
+ }
29
+ const register = mod?.sungenDriver?.register ?? mod?.register;
30
+ if (typeof register !== 'function') {
31
+ throw new Error(`${pkg} is installed but is not a sungen capability driver (missing sungenDriver.register).`);
32
+ }
33
+ }
34
+
11
35
  function findScreenDir(name: string): string | null {
12
36
  const s = path.join(process.cwd(), 'qa', 'screens', name);
13
37
  if (fs.existsSync(s)) return s;
@@ -111,16 +135,27 @@ export function registerCapabilityCommand(program: Command): void {
111
135
  const bundled = adapterRegistry.hasAdapter(adapterName); // e.g. `web` is bundled in Phase 2a
112
136
 
113
137
  if (!bundled && !o.skipInstall) {
114
- console.log(`📦 Installing ${meta.package} (dev dependency)...`);
115
- const r = spawnSync('npm', ['install', '-D', meta.package], { stdio: 'inherit', shell: true });
116
- if (r.status !== 0) throw new Error(`npm install -D ${meta.package} failed.`);
138
+ // Pin the driver to the RUNNING core's exact version (lockstep). Without this, plain
139
+ // `npm install @sungen/driver-x` resolves the package's `latest` dist-tag which on a
140
+ // beta channel can lag (e.g. a prerelease first-published-as-latest), pulling a driver
141
+ // whose core dep resolves to the wrong @sun-asterisk/sungen and fails to load.
142
+ const spec = `${meta.package}@${coreVersion()}`;
143
+ console.log(`📦 Installing ${spec} (dev dependency)...`);
144
+ const r = spawnSync('npm', ['install', '-D', spec], { stdio: 'inherit', shell: true });
145
+ if (r.status !== 0) throw new Error(`npm install -D ${spec} failed.`);
117
146
  } else if (bundled) {
118
147
  console.log(`✓ ${driver} is built-in (no install needed).`);
119
148
  }
120
149
 
121
- // Verify it can load (skip for bundled — already registered).
150
+ // Verify it loaded (skip for bundled — already registered). Two driver shapes:
151
+ // - platform driver (web/mobile): a codegen adapter, loaded via the adapter registry (mod.activate)
152
+ // - capability driver (db/api/…): a capability-SPI package (mod.sungenDriver.register) — NOT an adapter
122
153
  if (!bundled) {
123
- adapterRegistry.loadDriver(adapterName, meta.package, cwd); // throws if not loadable
154
+ if (meta.kind === 'platform') {
155
+ adapterRegistry.loadDriver(adapterName, meta.package, cwd); // throws if not loadable
156
+ } else {
157
+ verifyCapabilityDriver(meta.package, cwd); // capability SPI entry, resolved from the project
158
+ }
124
159
  }
125
160
 
126
161
  const profile = readCapabilities(cwd);