@autometa/coordinator 0.1.27 → 0.2.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @autometa/coordinator
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - de6dad7: Feat: Expressions are now loaded using config
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [de6dad7]
12
+ - @autometa/scopes@0.4.0
13
+ - @autometa/jest-executor@0.2.12
14
+ - @autometa/test-builder@0.1.29
15
+
16
+ ## 0.1.28
17
+
18
+ ### Patch Changes
19
+
20
+ - @autometa/scopes@0.3.6
21
+ - @autometa/jest-executor@0.2.11
22
+ - @autometa/test-builder@0.1.28
23
+
3
24
  ## 0.1.27
4
25
 
5
26
  ### Patch Changes
package/dist/esm/index.js CHANGED
@@ -49,6 +49,7 @@ var Coordinator = class {
49
49
  }
50
50
  start(gherkin, feature, events, executor) {
51
51
  this.global.unlock();
52
+ this.loadParameterTypes();
52
53
  this.loadSteps();
53
54
  this.global.lock();
54
55
  __privateSet(this, _builder, new TestBuilder(gherkin));
@@ -67,8 +68,8 @@ var Coordinator = class {
67
68
  }
68
69
  fileSystem(caller) {
69
70
  const { roots } = this.config;
70
- const { steps, features, app } = roots;
71
- __privateSet(this, _fs, new Files().withFeatureRoot(features).withCallerFile(caller).withStepsRoot(steps).withAppRoot(app));
71
+ const { steps, features, app, parameterTypes } = roots;
72
+ __privateSet(this, _fs, new Files().withFeatureRoot(features).withCallerFile(caller).withStepsRoot(steps).withParameterTypes(parameterTypes).withAppRoot(app));
72
73
  return this.fs;
73
74
  }
74
75
  loadSteps() {
@@ -81,6 +82,19 @@ var Coordinator = class {
81
82
  this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();
82
83
  }
83
84
  }
85
+ loadParameterTypes() {
86
+ const { parameterTypes } = this.config.roots;
87
+ if (parameterTypes === void 0) {
88
+ return;
89
+ }
90
+ if (typeof parameterTypes === "string") {
91
+ this.fs.fromUrlPattern(parameterTypes).loadParameterTypes();
92
+ return;
93
+ }
94
+ for (const paramTypeRoot of parameterTypes) {
95
+ this.fs.fromUrlPattern(paramTypeRoot).loadParameterTypes();
96
+ }
97
+ }
84
98
  };
85
99
  _fs = new WeakMap();
86
100
  _builder = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/coordinator.ts"],"sourcesContent":["import { Config } from \"@autometa/config\";\nimport { FeatureBridge, TestBuilder } from \"@autometa/test-builder\";\nimport { AutometaApp, AutometaWorld } from \"@autometa/app\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Class } from \"@autometa/types\";\nimport { FeatureScope, Files, GlobalScope } from \"@autometa/scopes\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AssertDefined } from \"@autometa/asserters\";\nimport { CoordinatorOpts } from \"./types\";\nimport { Feature } from \"@autometa/gherkin\";\nexport class Coordinator {\n #fs: Files;\n #builder: TestBuilder;\n #bridge: FeatureBridge;\n constructor(\n readonly global: GlobalScope,\n readonly configs: Config,\n readonly opts: Record<string, CoordinatorOpts>\n ) {\n AssertDefined(configs, \"Config\");\n }\n\n run(\n feature: FeatureScope,\n caller: string,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n AssertDefined(executor, \"Executor\");\n\n const fs = this.fileSystem(caller);\n const path = fs.fromUrlPattern(feature.path);\n path.loadApps();\n\n const gherkin = path.getFeatureFile();\n if (!Array.isArray(gherkin)) {\n this.start(gherkin, feature, events, executor);\n } else {\n for (const featGherkin of gherkin) {\n this.start(featGherkin, feature, events, executor);\n }\n }\n }\n\n private start(\n gherkin: Feature,\n feature: FeatureScope,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n this.global.unlock();\n this.loadSteps();\n this.global.lock();\n this.#builder = new TestBuilder(gherkin);\n this.#bridge = this.#builder.onFeatureExecuted(feature);\n const { app, world } = this.opts[this.config.environment ?? \"default\"];\n executor({ app, world }, this.global, this.#bridge, events, this.configs);\n }\n\n get fs() {\n if (!this.#fs) {\n throw new AutomationError(\"File System not initialized\");\n }\n return this.#fs;\n }\n\n get config() {\n return this.configs.current;\n }\n\n fileSystem(caller: string) {\n const { roots } = this.config;\n const { steps, features, app } = roots;\n\n this.#fs = new Files()\n .withFeatureRoot(features)\n .withCallerFile(caller)\n .withStepsRoot(steps)\n .withAppRoot(app);\n return this.fs;\n }\n\n loadSteps() {\n const { steps } = this.config.roots;\n if (typeof steps === \"string\") {\n this.fs.fromUrlPattern(steps).loadStepDefinitions();\n return;\n }\n for (const stepRoot of steps) {\n this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,SAAwB,mBAAmB;AAI3C,SAAuB,aAA0B;AACjD,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAP9B;AAUO,IAAM,cAAN,MAAkB;AAAA,EAIvB,YACW,QACA,SACA,MACT;AAHS;AACA;AACA;AANX;AACA;AACA;AAME,kBAAc,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,IACE,SACA,QACA,QACA,UAOA;AACA,kBAAc,UAAU,UAAU;AAElC,UAAM,KAAK,KAAK,WAAW,MAAM;AACjC,UAAM,OAAO,GAAG,eAAe,QAAQ,IAAI;AAC3C,SAAK,SAAS;AAEd,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAK,MAAM,SAAS,SAAS,QAAQ,QAAQ;AAAA,IAC/C,OAAO;AACL,iBAAW,eAAe,SAAS;AACjC,aAAK,MAAM,aAAa,SAAS,QAAQ,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,MACN,SACA,SACA,QACA,UAOA;AACA,SAAK,OAAO,OAAO;AACnB,SAAK,UAAU;AACf,SAAK,OAAO,KAAK;AACjB,uBAAK,UAAW,IAAI,YAAY,OAAO;AACvC,uBAAK,SAAU,mBAAK,UAAS,kBAAkB,OAAO;AACtD,UAAM,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,OAAO,eAAe,SAAS;AACrE,aAAS,EAAE,KAAK,MAAM,GAAG,KAAK,QAAQ,mBAAK,UAAS,QAAQ,KAAK,OAAO;AAAA,EAC1E;AAAA,EAEA,IAAI,KAAK;AACP,QAAI,CAAC,mBAAK,MAAK;AACb,YAAM,IAAI,gBAAgB,6BAA6B;AAAA,IACzD;AACA,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,WAAW,QAAgB;AACzB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,EAAE,OAAO,UAAU,IAAI,IAAI;AAEjC,uBAAK,KAAM,IAAI,MAAM,EAClB,gBAAgB,QAAQ,EACxB,eAAe,MAAM,EACrB,cAAc,KAAK,EACnB,YAAY,GAAG;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY;AACV,UAAM,EAAE,MAAM,IAAI,KAAK,OAAO;AAC9B,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,GAAG,eAAe,KAAK,EAAE,oBAAoB;AAClD;AAAA,IACF;AACA,eAAW,YAAY,OAAO;AAC5B,WAAK,GAAG,eAAe,QAAQ,EAAE,oBAAoB;AAAA,IACvD;AAAA,EACF;AACF;AA7FE;AACA;AACA;","names":[]}
1
+ {"version":3,"sources":["../../src/coordinator.ts"],"sourcesContent":["import { Config } from \"@autometa/config\";\nimport { FeatureBridge, TestBuilder } from \"@autometa/test-builder\";\nimport { AutometaApp, AutometaWorld } from \"@autometa/app\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Class } from \"@autometa/types\";\nimport { FeatureScope, Files, GlobalScope } from \"@autometa/scopes\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AssertDefined } from \"@autometa/asserters\";\nimport { CoordinatorOpts } from \"./types\";\nimport { Feature } from \"@autometa/gherkin\";\nexport class Coordinator {\n #fs: Files;\n #builder: TestBuilder;\n #bridge: FeatureBridge;\n constructor(\n readonly global: GlobalScope,\n readonly configs: Config,\n readonly opts: Record<string, CoordinatorOpts>\n ) {\n AssertDefined(configs, \"Config\");\n }\n\n run(\n feature: FeatureScope,\n caller: string,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n AssertDefined(executor, \"Executor\");\n\n const fs = this.fileSystem(caller);\n const path = fs.fromUrlPattern(feature.path);\n path.loadApps();\n\n const gherkin = path.getFeatureFile();\n if (!Array.isArray(gherkin)) {\n this.start(gherkin, feature, events, executor);\n } else {\n for (const featGherkin of gherkin) {\n this.start(featGherkin, feature, events, executor);\n }\n }\n }\n\n private start(\n gherkin: Feature,\n feature: FeatureScope,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n this.global.unlock();\n this.loadParameterTypes();\n this.loadSteps();\n this.global.lock();\n this.#builder = new TestBuilder(gherkin);\n this.#bridge = this.#builder.onFeatureExecuted(feature);\n const { app, world } = this.opts[this.config.environment ?? \"default\"];\n executor({ app, world }, this.global, this.#bridge, events, this.configs);\n }\n\n get fs() {\n if (!this.#fs) {\n throw new AutomationError(\"File System not initialized\");\n }\n return this.#fs;\n }\n\n get config() {\n return this.configs.current;\n }\n\n fileSystem(caller: string) {\n const { roots } = this.config;\n const { steps, features, app, parameterTypes } = roots;\n\n this.#fs = new Files()\n .withFeatureRoot(features)\n .withCallerFile(caller)\n .withStepsRoot(steps)\n .withParameterTypes(parameterTypes)\n .withAppRoot(app);\n return this.fs;\n }\n\n loadSteps() {\n const { steps } = this.config.roots;\n if (typeof steps === \"string\") {\n this.fs.fromUrlPattern(steps).loadStepDefinitions();\n return;\n }\n for (const stepRoot of steps) {\n this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();\n }\n }\n\n loadParameterTypes() {\n const { parameterTypes } = this.config.roots;\n if (parameterTypes === undefined) {\n return;\n }\n\n if (typeof parameterTypes === \"string\") {\n this.fs.fromUrlPattern(parameterTypes).loadParameterTypes();\n return;\n }\n\n for (const paramTypeRoot of parameterTypes) {\n this.fs.fromUrlPattern(paramTypeRoot).loadParameterTypes();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,SAAwB,mBAAmB;AAI3C,SAAuB,aAA0B;AACjD,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAP9B;AAUO,IAAM,cAAN,MAAkB;AAAA,EAIvB,YACW,QACA,SACA,MACT;AAHS;AACA;AACA;AANX;AACA;AACA;AAME,kBAAc,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,IACE,SACA,QACA,QACA,UAOA;AACA,kBAAc,UAAU,UAAU;AAElC,UAAM,KAAK,KAAK,WAAW,MAAM;AACjC,UAAM,OAAO,GAAG,eAAe,QAAQ,IAAI;AAC3C,SAAK,SAAS;AAEd,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAK,MAAM,SAAS,SAAS,QAAQ,QAAQ;AAAA,IAC/C,OAAO;AACL,iBAAW,eAAe,SAAS;AACjC,aAAK,MAAM,aAAa,SAAS,QAAQ,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,MACN,SACA,SACA,QACA,UAOA;AACA,SAAK,OAAO,OAAO;AACnB,SAAK,mBAAmB;AACxB,SAAK,UAAU;AACf,SAAK,OAAO,KAAK;AACjB,uBAAK,UAAW,IAAI,YAAY,OAAO;AACvC,uBAAK,SAAU,mBAAK,UAAS,kBAAkB,OAAO;AACtD,UAAM,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,OAAO,eAAe,SAAS;AACrE,aAAS,EAAE,KAAK,MAAM,GAAG,KAAK,QAAQ,mBAAK,UAAS,QAAQ,KAAK,OAAO;AAAA,EAC1E;AAAA,EAEA,IAAI,KAAK;AACP,QAAI,CAAC,mBAAK,MAAK;AACb,YAAM,IAAI,gBAAgB,6BAA6B;AAAA,IACzD;AACA,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,WAAW,QAAgB;AACzB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,EAAE,OAAO,UAAU,KAAK,eAAe,IAAI;AAEjD,uBAAK,KAAM,IAAI,MAAM,EAClB,gBAAgB,QAAQ,EACxB,eAAe,MAAM,EACrB,cAAc,KAAK,EACnB,mBAAmB,cAAc,EACjC,YAAY,GAAG;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY;AACV,UAAM,EAAE,MAAM,IAAI,KAAK,OAAO;AAC9B,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,GAAG,eAAe,KAAK,EAAE,oBAAoB;AAClD;AAAA,IACF;AACA,eAAW,YAAY,OAAO;AAC5B,WAAK,GAAG,eAAe,QAAQ,EAAE,oBAAoB;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,qBAAqB;AACnB,UAAM,EAAE,eAAe,IAAI,KAAK,OAAO;AACvC,QAAI,mBAAmB,QAAW;AAChC;AAAA,IACF;AAEA,QAAI,OAAO,mBAAmB,UAAU;AACtC,WAAK,GAAG,eAAe,cAAc,EAAE,mBAAmB;AAC1D;AAAA,IACF;AAEA,eAAW,iBAAiB,gBAAgB;AAC1C,WAAK,GAAG,eAAe,aAAa,EAAE,mBAAmB;AAAA,IAC3D;AAAA,EACF;AACF;AA/GE;AACA;AACA;","names":[]}
package/dist/index.d.cts CHANGED
@@ -45,6 +45,7 @@ declare class Coordinator {
45
45
  };
46
46
  fileSystem(caller: string): Files;
47
47
  loadSteps(): void;
48
+ loadParameterTypes(): void;
48
49
  }
49
50
 
50
51
  export { Coordinator, CoordinatorOpts };
package/dist/index.d.ts CHANGED
@@ -45,6 +45,7 @@ declare class Coordinator {
45
45
  };
46
46
  fileSystem(caller: string): Files;
47
47
  loadSteps(): void;
48
+ loadParameterTypes(): void;
48
49
  }
49
50
 
50
51
  export { Coordinator, CoordinatorOpts };
package/dist/index.js CHANGED
@@ -74,6 +74,7 @@ var Coordinator = class {
74
74
  }
75
75
  start(gherkin, feature, events, executor) {
76
76
  this.global.unlock();
77
+ this.loadParameterTypes();
77
78
  this.loadSteps();
78
79
  this.global.lock();
79
80
  __privateSet(this, _builder, new import_test_builder.TestBuilder(gherkin));
@@ -92,8 +93,8 @@ var Coordinator = class {
92
93
  }
93
94
  fileSystem(caller) {
94
95
  const { roots } = this.config;
95
- const { steps, features, app } = roots;
96
- __privateSet(this, _fs, new import_scopes.Files().withFeatureRoot(features).withCallerFile(caller).withStepsRoot(steps).withAppRoot(app));
96
+ const { steps, features, app, parameterTypes } = roots;
97
+ __privateSet(this, _fs, new import_scopes.Files().withFeatureRoot(features).withCallerFile(caller).withStepsRoot(steps).withParameterTypes(parameterTypes).withAppRoot(app));
97
98
  return this.fs;
98
99
  }
99
100
  loadSteps() {
@@ -106,6 +107,19 @@ var Coordinator = class {
106
107
  this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();
107
108
  }
108
109
  }
110
+ loadParameterTypes() {
111
+ const { parameterTypes } = this.config.roots;
112
+ if (parameterTypes === void 0) {
113
+ return;
114
+ }
115
+ if (typeof parameterTypes === "string") {
116
+ this.fs.fromUrlPattern(parameterTypes).loadParameterTypes();
117
+ return;
118
+ }
119
+ for (const paramTypeRoot of parameterTypes) {
120
+ this.fs.fromUrlPattern(paramTypeRoot).loadParameterTypes();
121
+ }
122
+ }
109
123
  };
110
124
  _fs = new WeakMap();
111
125
  _builder = new WeakMap();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/coordinator.ts"],"sourcesContent":["export * from \"./coordinator\";\nexport * from \"./types\";\n","import { Config } from \"@autometa/config\";\nimport { FeatureBridge, TestBuilder } from \"@autometa/test-builder\";\nimport { AutometaApp, AutometaWorld } from \"@autometa/app\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Class } from \"@autometa/types\";\nimport { FeatureScope, Files, GlobalScope } from \"@autometa/scopes\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AssertDefined } from \"@autometa/asserters\";\nimport { CoordinatorOpts } from \"./types\";\nimport { Feature } from \"@autometa/gherkin\";\nexport class Coordinator {\n #fs: Files;\n #builder: TestBuilder;\n #bridge: FeatureBridge;\n constructor(\n readonly global: GlobalScope,\n readonly configs: Config,\n readonly opts: Record<string, CoordinatorOpts>\n ) {\n AssertDefined(configs, \"Config\");\n }\n\n run(\n feature: FeatureScope,\n caller: string,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n AssertDefined(executor, \"Executor\");\n\n const fs = this.fileSystem(caller);\n const path = fs.fromUrlPattern(feature.path);\n path.loadApps();\n\n const gherkin = path.getFeatureFile();\n if (!Array.isArray(gherkin)) {\n this.start(gherkin, feature, events, executor);\n } else {\n for (const featGherkin of gherkin) {\n this.start(featGherkin, feature, events, executor);\n }\n }\n }\n\n private start(\n gherkin: Feature,\n feature: FeatureScope,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n this.global.unlock();\n this.loadSteps();\n this.global.lock();\n this.#builder = new TestBuilder(gherkin);\n this.#bridge = this.#builder.onFeatureExecuted(feature);\n const { app, world } = this.opts[this.config.environment ?? \"default\"];\n executor({ app, world }, this.global, this.#bridge, events, this.configs);\n }\n\n get fs() {\n if (!this.#fs) {\n throw new AutomationError(\"File System not initialized\");\n }\n return this.#fs;\n }\n\n get config() {\n return this.configs.current;\n }\n\n fileSystem(caller: string) {\n const { roots } = this.config;\n const { steps, features, app } = roots;\n\n this.#fs = new Files()\n .withFeatureRoot(features)\n .withCallerFile(caller)\n .withStepsRoot(steps)\n .withAppRoot(app);\n return this.fs;\n }\n\n loadSteps() {\n const { steps } = this.config.roots;\n if (typeof steps === \"string\") {\n this.fs.fromUrlPattern(steps).loadStepDefinitions();\n return;\n }\n for (const stepRoot of steps) {\n this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,0BAA2C;AAI3C,oBAAiD;AACjD,oBAAgC;AAChC,uBAA8B;AAP9B;AAUO,IAAM,cAAN,MAAkB;AAAA,EAIvB,YACW,QACA,SACA,MACT;AAHS;AACA;AACA;AANX;AACA;AACA;AAME,wCAAc,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,IACE,SACA,QACA,QACA,UAOA;AACA,wCAAc,UAAU,UAAU;AAElC,UAAM,KAAK,KAAK,WAAW,MAAM;AACjC,UAAM,OAAO,GAAG,eAAe,QAAQ,IAAI;AAC3C,SAAK,SAAS;AAEd,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAK,MAAM,SAAS,SAAS,QAAQ,QAAQ;AAAA,IAC/C,OAAO;AACL,iBAAW,eAAe,SAAS;AACjC,aAAK,MAAM,aAAa,SAAS,QAAQ,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,MACN,SACA,SACA,QACA,UAOA;AACA,SAAK,OAAO,OAAO;AACnB,SAAK,UAAU;AACf,SAAK,OAAO,KAAK;AACjB,uBAAK,UAAW,IAAI,gCAAY,OAAO;AACvC,uBAAK,SAAU,mBAAK,UAAS,kBAAkB,OAAO;AACtD,UAAM,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,OAAO,eAAe,SAAS;AACrE,aAAS,EAAE,KAAK,MAAM,GAAG,KAAK,QAAQ,mBAAK,UAAS,QAAQ,KAAK,OAAO;AAAA,EAC1E;AAAA,EAEA,IAAI,KAAK;AACP,QAAI,CAAC,mBAAK,MAAK;AACb,YAAM,IAAI,8BAAgB,6BAA6B;AAAA,IACzD;AACA,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,WAAW,QAAgB;AACzB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,EAAE,OAAO,UAAU,IAAI,IAAI;AAEjC,uBAAK,KAAM,IAAI,oBAAM,EAClB,gBAAgB,QAAQ,EACxB,eAAe,MAAM,EACrB,cAAc,KAAK,EACnB,YAAY,GAAG;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY;AACV,UAAM,EAAE,MAAM,IAAI,KAAK,OAAO;AAC9B,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,GAAG,eAAe,KAAK,EAAE,oBAAoB;AAClD;AAAA,IACF;AACA,eAAW,YAAY,OAAO;AAC5B,WAAK,GAAG,eAAe,QAAQ,EAAE,oBAAoB;AAAA,IACvD;AAAA,EACF;AACF;AA7FE;AACA;AACA;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/coordinator.ts"],"sourcesContent":["export * from \"./coordinator\";\nexport * from \"./types\";\n","import { Config } from \"@autometa/config\";\nimport { FeatureBridge, TestBuilder } from \"@autometa/test-builder\";\nimport { AutometaApp, AutometaWorld } from \"@autometa/app\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Class } from \"@autometa/types\";\nimport { FeatureScope, Files, GlobalScope } from \"@autometa/scopes\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AssertDefined } from \"@autometa/asserters\";\nimport { CoordinatorOpts } from \"./types\";\nimport { Feature } from \"@autometa/gherkin\";\nexport class Coordinator {\n #fs: Files;\n #builder: TestBuilder;\n #bridge: FeatureBridge;\n constructor(\n readonly global: GlobalScope,\n readonly configs: Config,\n readonly opts: Record<string, CoordinatorOpts>\n ) {\n AssertDefined(configs, \"Config\");\n }\n\n run(\n feature: FeatureScope,\n caller: string,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n AssertDefined(executor, \"Executor\");\n\n const fs = this.fileSystem(caller);\n const path = fs.fromUrlPattern(feature.path);\n path.loadApps();\n\n const gherkin = path.getFeatureFile();\n if (!Array.isArray(gherkin)) {\n this.start(gherkin, feature, events, executor);\n } else {\n for (const featGherkin of gherkin) {\n this.start(featGherkin, feature, events, executor);\n }\n }\n }\n\n private start(\n gherkin: Feature,\n feature: FeatureScope,\n events: TestEventEmitter,\n executor: (\n { app, world }: { app: Class<AutometaApp>; world: Class<AutometaWorld> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n ) => void\n ) {\n this.global.unlock();\n this.loadParameterTypes();\n this.loadSteps();\n this.global.lock();\n this.#builder = new TestBuilder(gherkin);\n this.#bridge = this.#builder.onFeatureExecuted(feature);\n const { app, world } = this.opts[this.config.environment ?? \"default\"];\n executor({ app, world }, this.global, this.#bridge, events, this.configs);\n }\n\n get fs() {\n if (!this.#fs) {\n throw new AutomationError(\"File System not initialized\");\n }\n return this.#fs;\n }\n\n get config() {\n return this.configs.current;\n }\n\n fileSystem(caller: string) {\n const { roots } = this.config;\n const { steps, features, app, parameterTypes } = roots;\n\n this.#fs = new Files()\n .withFeatureRoot(features)\n .withCallerFile(caller)\n .withStepsRoot(steps)\n .withParameterTypes(parameterTypes)\n .withAppRoot(app);\n return this.fs;\n }\n\n loadSteps() {\n const { steps } = this.config.roots;\n if (typeof steps === \"string\") {\n this.fs.fromUrlPattern(steps).loadStepDefinitions();\n return;\n }\n for (const stepRoot of steps) {\n this.fs.fromUrlPattern(stepRoot).loadStepDefinitions();\n }\n }\n\n loadParameterTypes() {\n const { parameterTypes } = this.config.roots;\n if (parameterTypes === undefined) {\n return;\n }\n\n if (typeof parameterTypes === \"string\") {\n this.fs.fromUrlPattern(parameterTypes).loadParameterTypes();\n return;\n }\n\n for (const paramTypeRoot of parameterTypes) {\n this.fs.fromUrlPattern(paramTypeRoot).loadParameterTypes();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,0BAA2C;AAI3C,oBAAiD;AACjD,oBAAgC;AAChC,uBAA8B;AAP9B;AAUO,IAAM,cAAN,MAAkB;AAAA,EAIvB,YACW,QACA,SACA,MACT;AAHS;AACA;AACA;AANX;AACA;AACA;AAME,wCAAc,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,IACE,SACA,QACA,QACA,UAOA;AACA,wCAAc,UAAU,UAAU;AAElC,UAAM,KAAK,KAAK,WAAW,MAAM;AACjC,UAAM,OAAO,GAAG,eAAe,QAAQ,IAAI;AAC3C,SAAK,SAAS;AAEd,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAK,MAAM,SAAS,SAAS,QAAQ,QAAQ;AAAA,IAC/C,OAAO;AACL,iBAAW,eAAe,SAAS;AACjC,aAAK,MAAM,aAAa,SAAS,QAAQ,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,MACN,SACA,SACA,QACA,UAOA;AACA,SAAK,OAAO,OAAO;AACnB,SAAK,mBAAmB;AACxB,SAAK,UAAU;AACf,SAAK,OAAO,KAAK;AACjB,uBAAK,UAAW,IAAI,gCAAY,OAAO;AACvC,uBAAK,SAAU,mBAAK,UAAS,kBAAkB,OAAO;AACtD,UAAM,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,OAAO,eAAe,SAAS;AACrE,aAAS,EAAE,KAAK,MAAM,GAAG,KAAK,QAAQ,mBAAK,UAAS,QAAQ,KAAK,OAAO;AAAA,EAC1E;AAAA,EAEA,IAAI,KAAK;AACP,QAAI,CAAC,mBAAK,MAAK;AACb,YAAM,IAAI,8BAAgB,6BAA6B;AAAA,IACzD;AACA,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,WAAW,QAAgB;AACzB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,EAAE,OAAO,UAAU,KAAK,eAAe,IAAI;AAEjD,uBAAK,KAAM,IAAI,oBAAM,EAClB,gBAAgB,QAAQ,EACxB,eAAe,MAAM,EACrB,cAAc,KAAK,EACnB,mBAAmB,cAAc,EACjC,YAAY,GAAG;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY;AACV,UAAM,EAAE,MAAM,IAAI,KAAK,OAAO;AAC9B,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,GAAG,eAAe,KAAK,EAAE,oBAAoB;AAClD;AAAA,IACF;AACA,eAAW,YAAY,OAAO;AAC5B,WAAK,GAAG,eAAe,QAAQ,EAAE,oBAAoB;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,qBAAqB;AACnB,UAAM,EAAE,eAAe,IAAI,KAAK,OAAO;AACvC,QAAI,mBAAmB,QAAW;AAChC;AAAA,IACF;AAEA,QAAI,OAAO,mBAAmB,UAAU;AACtC,WAAK,GAAG,eAAe,cAAc,EAAE,mBAAmB;AAC1D;AAAA,IACF;AAEA,eAAW,iBAAiB,gBAAgB;AAC1C,WAAK,GAAG,eAAe,aAAa,EAAE,mBAAmB;AAAA,IAC3D;AAAA,EACF;AACF;AA/GE;AACA;AACA;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autometa/coordinator",
3
- "version": "0.1.27",
3
+ "version": "0.2.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,9 +36,9 @@
36
36
  "@autometa/errors": "^0.1.3",
37
37
  "@autometa/events": "^0.2.4",
38
38
  "@autometa/gherkin": "^0.5.1",
39
- "@autometa/jest-executor": "^0.2.10",
40
- "@autometa/scopes": "^0.3.5",
41
- "@autometa/test-builder": "^0.1.27",
39
+ "@autometa/jest-executor": "^0.2.12",
40
+ "@autometa/scopes": "^0.4.0",
41
+ "@autometa/test-builder": "^0.1.29",
42
42
  "@autometa/types": "^0.4.1",
43
43
  "tsyringe": "^4.8.0"
44
44
  },