@nouhouari/conductor-e2e 0.0.0-stage → 0.1.8

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 (101) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +21 -0
  3. package/README.md +138 -2
  4. package/config/environments/default.ts +41 -0
  5. package/config/environments/dev.ts +16 -0
  6. package/config/environments/staging.ts +15 -0
  7. package/config/index.ts +70 -0
  8. package/config/types.ts +94 -0
  9. package/dist/config/environments/default.d.ts +3 -0
  10. package/dist/config/environments/default.d.ts.map +1 -0
  11. package/dist/config/environments/default.js +40 -0
  12. package/dist/config/environments/default.js.map +1 -0
  13. package/dist/config/environments/dev.d.ts +3 -0
  14. package/dist/config/environments/dev.d.ts.map +1 -0
  15. package/dist/config/environments/dev.js +18 -0
  16. package/dist/config/environments/dev.js.map +1 -0
  17. package/dist/config/environments/staging.d.ts +3 -0
  18. package/dist/config/environments/staging.d.ts.map +1 -0
  19. package/dist/config/environments/staging.js +17 -0
  20. package/dist/config/environments/staging.js.map +1 -0
  21. package/dist/config/index.d.ts +7 -0
  22. package/dist/config/index.d.ts.map +1 -0
  23. package/dist/config/index.js +81 -0
  24. package/dist/config/index.js.map +1 -0
  25. package/dist/config/types.d.ts +93 -0
  26. package/dist/config/types.d.ts.map +1 -0
  27. package/dist/config/types.js +3 -0
  28. package/dist/config/types.js.map +1 -0
  29. package/dist/src/drivers/ApiDriver.d.ts +16 -0
  30. package/dist/src/drivers/ApiDriver.d.ts.map +1 -0
  31. package/dist/src/drivers/ApiDriver.js +48 -0
  32. package/dist/src/drivers/ApiDriver.js.map +1 -0
  33. package/dist/src/drivers/DatabaseDriver.d.ts +12 -0
  34. package/dist/src/drivers/DatabaseDriver.d.ts.map +1 -0
  35. package/dist/src/drivers/DatabaseDriver.js +15 -0
  36. package/dist/src/drivers/DatabaseDriver.js.map +1 -0
  37. package/dist/src/drivers/FlutterDesktopDriver.d.ts +139 -0
  38. package/dist/src/drivers/FlutterDesktopDriver.d.ts.map +1 -0
  39. package/dist/src/drivers/FlutterDesktopDriver.js +445 -0
  40. package/dist/src/drivers/FlutterDesktopDriver.js.map +1 -0
  41. package/dist/src/drivers/MaestroDriver.d.ts +19 -0
  42. package/dist/src/drivers/MaestroDriver.d.ts.map +1 -0
  43. package/dist/src/drivers/MaestroDriver.js +144 -0
  44. package/dist/src/drivers/MaestroDriver.js.map +1 -0
  45. package/dist/src/drivers/WebDriver.d.ts +21 -0
  46. package/dist/src/drivers/WebDriver.d.ts.map +1 -0
  47. package/dist/src/drivers/WebDriver.js +57 -0
  48. package/dist/src/drivers/WebDriver.js.map +1 -0
  49. package/dist/src/hooks/browser.hooks.d.ts +2 -0
  50. package/dist/src/hooks/browser.hooks.d.ts.map +1 -0
  51. package/dist/src/hooks/browser.hooks.js +15 -0
  52. package/dist/src/hooks/browser.hooks.js.map +1 -0
  53. package/dist/src/hooks/database.hooks.d.ts +2 -0
  54. package/dist/src/hooks/database.hooks.d.ts.map +1 -0
  55. package/dist/src/hooks/database.hooks.js +11 -0
  56. package/dist/src/hooks/database.hooks.js.map +1 -0
  57. package/dist/src/hooks/desktop.hooks.d.ts +2 -0
  58. package/dist/src/hooks/desktop.hooks.d.ts.map +1 -0
  59. package/dist/src/hooks/desktop.hooks.js +15 -0
  60. package/dist/src/hooks/desktop.hooks.js.map +1 -0
  61. package/dist/src/hooks/flutterDesktop.hooks.d.ts +2 -0
  62. package/dist/src/hooks/flutterDesktop.hooks.d.ts.map +1 -0
  63. package/dist/src/hooks/flutterDesktop.hooks.js +26 -0
  64. package/dist/src/hooks/flutterDesktop.hooks.js.map +1 -0
  65. package/dist/src/hooks/index.d.ts +6 -0
  66. package/dist/src/hooks/index.d.ts.map +1 -0
  67. package/dist/src/hooks/index.js +25 -0
  68. package/dist/src/hooks/index.js.map +1 -0
  69. package/dist/src/hooks/maestro.hooks.d.ts +2 -0
  70. package/dist/src/hooks/maestro.hooks.d.ts.map +1 -0
  71. package/dist/src/hooks/maestro.hooks.js +8 -0
  72. package/dist/src/hooks/maestro.hooks.js.map +1 -0
  73. package/dist/src/index.d.ts +21 -0
  74. package/dist/src/index.d.ts.map +1 -0
  75. package/dist/src/index.js +30 -0
  76. package/dist/src/index.js.map +1 -0
  77. package/dist/src/pages/BasePage.d.ts +11 -0
  78. package/dist/src/pages/BasePage.d.ts.map +1 -0
  79. package/dist/src/pages/BasePage.js +22 -0
  80. package/dist/src/pages/BasePage.js.map +1 -0
  81. package/dist/src/scenarios/RemoteScenarioFetcher.d.ts +51 -0
  82. package/dist/src/scenarios/RemoteScenarioFetcher.d.ts.map +1 -0
  83. package/dist/src/scenarios/RemoteScenarioFetcher.js +162 -0
  84. package/dist/src/scenarios/RemoteScenarioFetcher.js.map +1 -0
  85. package/dist/src/scenarios/cli.d.ts +3 -0
  86. package/dist/src/scenarios/cli.d.ts.map +1 -0
  87. package/dist/src/scenarios/cli.js +26 -0
  88. package/dist/src/scenarios/cli.js.map +1 -0
  89. package/dist/src/support/logger.d.ts +3 -0
  90. package/dist/src/support/logger.d.ts.map +1 -0
  91. package/dist/src/support/logger.js +16 -0
  92. package/dist/src/support/logger.js.map +1 -0
  93. package/dist/src/support/retry.d.ts +7 -0
  94. package/dist/src/support/retry.d.ts.map +1 -0
  95. package/dist/src/support/retry.js +21 -0
  96. package/dist/src/support/retry.js.map +1 -0
  97. package/dist/src/world/ConductorWorld.d.ts +39 -0
  98. package/dist/src/world/ConductorWorld.d.ts.map +1 -0
  99. package/dist/src/world/ConductorWorld.js +112 -0
  100. package/dist/src/world/ConductorWorld.js.map +1 -0
  101. package/package.json +81 -4
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const config_1 = require("../../config");
5
+ const RemoteScenarioFetcher_1 = require("./RemoteScenarioFetcher");
6
+ /**
7
+ * Prefetch step for the `remote` cucumber profile: fetch scenarios from the requ
8
+ * scenario API and reconstruct them into `.feature` files, then exit. Run before
9
+ * `cucumber-js --profile remote`.
10
+ */
11
+ async function main() {
12
+ const remote = config_1.config.remoteScenarios;
13
+ if (!remote) {
14
+ throw new Error('No `remoteScenarios` config found. Configure it in config/environments or via REMOTE_SCENARIOS_* env vars.');
15
+ }
16
+ const where = remote.project ? ` (project: ${remote.project})` : '';
17
+ console.log(`Fetching scenarios from ${remote.baseUrl}${where} ...`);
18
+ const scenarios = await (0, RemoteScenarioFetcher_1.fetchScenarios)(remote);
19
+ const result = await (0, RemoteScenarioFetcher_1.reconstructFeatureFiles)(scenarios, remote.outputDir);
20
+ console.log(`Wrote ${result.scenarios} scenario(s) across ${result.features} feature file(s) to ${result.dir}`);
21
+ }
22
+ main().catch((err) => {
23
+ console.error(`fetch-features failed: ${err.message}`);
24
+ process.exit(1);
25
+ });
26
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/scenarios/cli.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AACtC,mEAAkF;AAElF;;;;GAIG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,eAAM,CAAC,eAAe,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,MAAM,IAAA,sCAAc,EAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,+CAAuB,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAG,CACT,SAAS,MAAM,CAAC,SAAS,uBAAuB,MAAM,CAAC,QAAQ,uBAAuB,MAAM,CAAC,GAAG,EAAE,CACnG,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import pino from 'pino';
2
+ export declare function createLogger(name: string): pino.Logger<never, boolean>;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/support/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,+BAOxC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createLogger = createLogger;
7
+ const pino_1 = __importDefault(require("pino"));
8
+ function createLogger(name) {
9
+ const isDev = process.env.NODE_ENV !== 'production';
10
+ return (0, pino_1.default)({
11
+ name,
12
+ level: process.env.LOG_LEVEL ?? 'info',
13
+ transport: isDev ? { target: 'pino-pretty', options: { colorize: true } } : undefined
14
+ });
15
+ }
16
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/support/logger.ts"],"names":[],"mappings":";;;;;AAEA,oCAOC;AATD,gDAAwB;AAExB,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IACpD,OAAO,IAAA,cAAI,EAAC;QACV,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface RetryOptions {
2
+ attempts?: number;
3
+ delayMs?: number;
4
+ backoff?: 'fixed' | 'exponential';
5
+ }
6
+ export declare function retry<T>(fn: () => Promise<T>, opts?: RetryOptions): Promise<T>;
7
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/support/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CACnC;AAED,wBAAsB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAiBxF"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retry = retry;
4
+ async function retry(fn, opts = {}) {
5
+ const { attempts = 3, delayMs = 1000, backoff = 'fixed' } = opts;
6
+ let lastError;
7
+ for (let i = 0; i < attempts; i++) {
8
+ try {
9
+ return await fn();
10
+ }
11
+ catch (err) {
12
+ lastError = err;
13
+ if (i < attempts - 1) {
14
+ const wait = backoff === 'exponential' ? delayMs * 2 ** i : delayMs;
15
+ await new Promise((r) => setTimeout(r, wait));
16
+ }
17
+ }
18
+ }
19
+ throw lastError;
20
+ }
21
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/support/retry.ts"],"names":[],"mappings":";;AAMA,sBAiBC;AAjBM,KAAK,UAAU,KAAK,CAAI,EAAoB,EAAE,OAAqB,EAAE;IAC1E,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACjE,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACpE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { IWorldOptions, World } from '@cucumber/cucumber';
2
+ import { Page, APIRequestContext } from 'playwright';
3
+ import type { EnvironmentConfig } from '../../config/types';
4
+ import { WebDriver } from '../drivers/WebDriver';
5
+ import { ApiDriver } from '../drivers/ApiDriver';
6
+ import { MaestroDriver } from '../drivers/MaestroDriver';
7
+ import { DatabaseDriver } from '../drivers/DatabaseDriver';
8
+ import { JavaFxDriver } from 'javafx-driver';
9
+ import { FlutterDesktopDriver } from '../drivers/FlutterDesktopDriver';
10
+ export declare class ConductorWorld extends World {
11
+ readonly config: EnvironmentConfig;
12
+ readonly logger: import("pino").Logger<never, boolean>;
13
+ readonly data: Record<string, unknown>;
14
+ private _webDriver;
15
+ private _apiDriver;
16
+ private _maestroDriver;
17
+ private _dbDriver;
18
+ private _fxDriver;
19
+ private _flutterDesktopDriver;
20
+ constructor(options: IWorldOptions);
21
+ get web(): WebDriver;
22
+ get page(): Page;
23
+ get api(): ApiDriver;
24
+ get request(): APIRequestContext;
25
+ get maestro(): MaestroDriver;
26
+ get fx(): JavaFxDriver;
27
+ get isFxLaunched(): boolean;
28
+ closeFx(): Promise<void>;
29
+ get flutterDesktop(): FlutterDesktopDriver;
30
+ get isFlutterDesktopLaunched(): boolean;
31
+ closeFlutterDesktop(): Promise<void>;
32
+ setDb(driver: DatabaseDriver): void;
33
+ get db(): DatabaseDriver;
34
+ get hasDb(): boolean;
35
+ closeWeb(): Promise<void>;
36
+ disposeApi(): Promise<void>;
37
+ disconnectDb(): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=ConductorWorld.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConductorWorld.d.ts","sourceRoot":"","sources":["../../../src/world/ConductorWorld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAU;IAC5C,QAAQ,CAAC,MAAM,wCAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,qBAAqB,CAAqC;gBAEtD,OAAO,EAAE,aAAa;IAMlC,IAAI,GAAG,IAAI,SAAS,CAGnB;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAID,IAAI,GAAG,IAAI,SAAS,CAGnB;IAED,IAAI,OAAO,IAAI,iBAAiB,CAE/B;IAID,IAAI,OAAO,IAAI,aAAa,CAG3B;IAID,IAAI,EAAE,IAAI,YAAY,CAQrB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,IAAI,cAAc,IAAI,oBAAoB,CAQzC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAEK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1C,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAInC,IAAI,EAAE,IAAI,cAAc,CAGvB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAIK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConductorWorld = void 0;
4
+ const cucumber_1 = require("@cucumber/cucumber");
5
+ const config_1 = require("../../config");
6
+ const WebDriver_1 = require("../drivers/WebDriver");
7
+ const ApiDriver_1 = require("../drivers/ApiDriver");
8
+ const MaestroDriver_1 = require("../drivers/MaestroDriver");
9
+ const javafx_driver_1 = require("javafx-driver");
10
+ const FlutterDesktopDriver_1 = require("../drivers/FlutterDesktopDriver");
11
+ const logger_1 = require("../support/logger");
12
+ class ConductorWorld extends cucumber_1.World {
13
+ config = config_1.config;
14
+ logger = (0, logger_1.createLogger)('conductor');
15
+ data = {};
16
+ _webDriver = null;
17
+ _apiDriver = null;
18
+ _maestroDriver = null;
19
+ _dbDriver = null;
20
+ _fxDriver = null;
21
+ _flutterDesktopDriver = null;
22
+ constructor(options) {
23
+ super(options);
24
+ }
25
+ // Web
26
+ get web() {
27
+ if (!this._webDriver)
28
+ this._webDriver = new WebDriver_1.WebDriver(this.config);
29
+ return this._webDriver;
30
+ }
31
+ get page() {
32
+ return this.web.page;
33
+ }
34
+ // API
35
+ get api() {
36
+ if (!this._apiDriver)
37
+ this._apiDriver = new ApiDriver_1.ApiDriver(this.config);
38
+ return this._apiDriver;
39
+ }
40
+ get request() {
41
+ return this.api.client;
42
+ }
43
+ // Mobile
44
+ get maestro() {
45
+ if (!this._maestroDriver)
46
+ this._maestroDriver = new MaestroDriver_1.MaestroDriver(this.config);
47
+ return this._maestroDriver;
48
+ }
49
+ // Desktop (JavaFX)
50
+ get fx() {
51
+ if (!this._fxDriver) {
52
+ if (!this.config.desktop) {
53
+ throw new Error('No desktop config. Set config.desktop with DesktopConfig.');
54
+ }
55
+ this._fxDriver = new javafx_driver_1.JavaFxDriver(this.config.desktop);
56
+ }
57
+ return this._fxDriver;
58
+ }
59
+ get isFxLaunched() {
60
+ return this._fxDriver?.isLaunched ?? false;
61
+ }
62
+ async closeFx() {
63
+ await this._fxDriver?.close();
64
+ this._fxDriver = null;
65
+ }
66
+ // Desktop (Flutter)
67
+ get flutterDesktop() {
68
+ if (!this._flutterDesktopDriver) {
69
+ if (!this.config.flutterDesktop) {
70
+ throw new Error('No flutterDesktop config. Set config.flutterDesktop with FlutterDesktopConfig.');
71
+ }
72
+ this._flutterDesktopDriver = new FlutterDesktopDriver_1.FlutterDesktopDriver(this.config);
73
+ }
74
+ return this._flutterDesktopDriver;
75
+ }
76
+ get isFlutterDesktopLaunched() {
77
+ return this._flutterDesktopDriver?.isLaunched ?? false;
78
+ }
79
+ async closeFlutterDesktop() {
80
+ await this._flutterDesktopDriver?.close();
81
+ this._flutterDesktopDriver = null;
82
+ }
83
+ // Database (plugin — user registers their adapter)
84
+ setDb(driver) {
85
+ this._dbDriver = driver;
86
+ }
87
+ get db() {
88
+ if (!this._dbDriver)
89
+ throw new Error('No DatabaseDriver registered. Call world.setDb(adapter) in a Before hook.');
90
+ return this._dbDriver;
91
+ }
92
+ get hasDb() {
93
+ return this._dbDriver !== null;
94
+ }
95
+ // Tear-down helpers (called by hooks)
96
+ async closeWeb() {
97
+ await this._webDriver?.close();
98
+ this._webDriver = null;
99
+ }
100
+ async disposeApi() {
101
+ await this._apiDriver?.dispose();
102
+ this._apiDriver = null;
103
+ }
104
+ async disconnectDb() {
105
+ if (this._dbDriver) {
106
+ await this._dbDriver.disconnect();
107
+ this._dbDriver = null;
108
+ }
109
+ }
110
+ }
111
+ exports.ConductorWorld = ConductorWorld;
112
+ //# sourceMappingURL=ConductorWorld.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConductorWorld.js","sourceRoot":"","sources":["../../../src/world/ConductorWorld.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,83 @@
1
1
  {
2
2
  "name": "@nouhouari/conductor-e2e",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.8",
4
+ "description": "Multi-platform E2E test framework — web (Playwright), API, mobile (Maestro), desktop (JavaFX), and database in one Cucumber scenario",
5
+ "keywords": [
6
+ "e2e",
7
+ "testing",
8
+ "cucumber",
9
+ "bdd",
10
+ "playwright",
11
+ "maestro",
12
+ "flutter",
13
+ "javafx",
14
+ "multi-platform",
15
+ "test-framework"
16
+ ],
17
+ "author": "Nourreddine Houari",
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/nouhouari/conductor.git"
22
+ },
23
+ "homepage": "https://github.com/nouhouari/conductor#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/nouhouari/conductor/issues"
26
+ },
27
+ "workspaces": [
28
+ "example",
29
+ "mcp"
30
+ ],
31
+ "main": "dist/src/index.js",
32
+ "types": "dist/src/index.d.ts",
33
+ "bin": {
34
+ "conductor-fetch-features": "dist/src/scenarios/cli.js"
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "config",
39
+ "README.md",
40
+ "LICENSE",
41
+ "CHANGELOG.md"
42
+ ],
43
+ "scripts": {
44
+ "build": "tsc",
45
+ "clean": "rm -rf dist",
46
+ "prepublishOnly": "npm run clean && npm run build",
47
+ "test": "cucumber-js",
48
+ "test:dry-run": "cucumber-js --dry-run",
49
+ "flutter:build:macos": "cd apps/mobile && flutter build macos --profile -t lib/main_test.dart --dart-define=API_BASE_URL=http://localhost:3000/api --dart-define=DISABLE_SWIPE_GESTURES=true",
50
+ "report": "allure generate allure-results --clean -o allure-report",
51
+ "report:open": "allure open allure-report"
52
+ },
53
+ "exports": {
54
+ ".": {
55
+ "import": "./dist/src/index.js",
56
+ "require": "./dist/src/index.js",
57
+ "types": "./dist/src/index.d.ts"
58
+ }
59
+ },
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ },
63
+ "dependencies": {
64
+ "@cucumber/cucumber": "^11.0.0",
65
+ "allure-commandline": "^2.27.0",
66
+ "allure-cucumberjs": "^3.0.0",
67
+ "dotenv": "^16.4.5",
68
+ "javafx-driver": "^0.2.2",
69
+ "pino": "^9.0.0",
70
+ "pino-pretty": "^11.0.0",
71
+ "playwright": "^1.44.0",
72
+ "ws": "^8.21.0"
73
+ },
74
+ "devDependencies": {
75
+ "@types/node": "^20.0.0",
76
+ "@types/ws": "^8.18.1",
77
+ "ts-node": "^10.9.0",
78
+ "typescript": "^5.4.0"
79
+ },
80
+ "publishConfig": {
81
+ "registry": "https://npm.pkg.github.com"
82
+ }
83
+ }