@autometa/app 0.1.1 → 0.1.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/autometa-app.ts","../../src/autometa-world.ts","../../src/get-app.ts","../../src/decorators/fixture.ts","../../src/decorators/app-type.ts"],"sourcesContent":["import { World } from \"./fixtures.typings\";\n\nexport abstract class AutometaApp {\n [key: string]: unknown;\n world: World\n}\n","import { PhraseParser, IFromPhrase } from \"@autometa/phrases\";\n\n@PhraseParser\nexport class AutometaWorld {\n [key: string]: unknown;\n\n fromPhrase: IFromPhrase;\n}\n","import { container } from \"tsyringe\";\nimport { AutometaApp } from \"./autometa-app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AutometaWorld } from \".\";\n\nexport function getApp<T extends AutometaApp, K extends AutometaWorld>(\n appType: Class<T>,\n worldType: Class<K>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...instances: { token: any; instance?: any; cls?: Class<any> }[]\n) {\n if (!appType) {\n throw new AutomationError(`A reference to an 'app' and 'world' is required to run tests.\n\nConfigure the app by extending 'AutometaApp' and adding it to your\n'autometa.config.ts' file:\n\n@AppType(MyWorld)\nexport class MyAutometaApp extends AutometaApp {\n ...\n}\ndefineConfig({\n roots: {\n app: './src/apps'\n }\n})`);\n }\n container.registerType(worldType, worldType);\n instances.forEach(({ token, instance, cls }) =>\n instance\n ? child.registerInstance(token, instance)\n : cls\n ? child.registerType(token, cls)\n : null\n );\n\n const child = container.createChildContainer();\n const app = child.resolve(appType);\n app.world = child.resolve(worldType);\n return app;\n}\n","import \"reflect-metadata\";\n\nimport { Class } from \"@autometa/types\";\nimport { scoped, inject, Lifecycle, injectable } from \"tsyringe\";\n/**\n * Marks a class as an injectable fixture. Constructor parameters\n * which are also injectable will be automatically constructed\n * and passed to the constructor.\n *\n * Example fixtures are the `App` which acts as shared\n * entry point for all steps in a test, and the World,\n * which stores persistent data across tests.\n *\n * Fixtures are persistent by default, meaning each class\n * will exist as a singleton for the duration of the test\n * ```ts\n * @Fixture\n * export class World {\n * [key: string]: unknown;\n *\n * declare someExpectedData: MyDataType\n * }\n *\n * @Fixture\n * export class MyClient {\n * constructor(world: MyWorld){}\n *\n * login = async ()=>{\n * this.world.someExpectedData = await fetch(...)\n * }\n * }\n *\n * @Fixture\n * export class App {\n * constructor(\n * world: MyWorld,\n * client: MyClient\n * ){}\n * }\n * ```\n */\nexport function Fixture(scope = Lifecycle.ContainerScoped) {\n return (target: Class<unknown>) => {\n injectable()(target);\n scoped(scope as Lifecycle.ContainerScoped | Lifecycle.ResolutionScoped)(\n target\n );\n };\n}\n\nexport const Inject = inject;\n\n\n","import { Class } from \"@autometa/types\";\nimport { Lifecycle } from \"tsyringe\";\nimport { AutometaWorld } from \"..\";\nimport { Fixture } from \"./fixture\";\n\n\nexport function AppType(\n container: Record<string, { app: unknown; world: unknown; }>,\n world: Class<AutometaWorld>,\n environment = \"default\"\n) {\n const env = environment ?? \"default\";\n return (target: Class<unknown>) => {\n Fixture(Lifecycle.ContainerScoped)(target);\n container[env] = { app: target, world };\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAEO,IAAe,cAAf,MAA2B;AAGlC;;;ACLA,SAAS,oBAAiC;AAGnC,IAAM,gBAAN,MAAoB;AAI3B;AAJa,gBAAN;AAAA,EADN;AAAA,GACY;;;ACHb,SAAS,iBAAiB;AAG1B,SAAS,uBAAuB;AAGzB,SAAS,OACd,SACA,cAEG,WACH;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAa3B;AAAA,EACD;AACA,YAAU,aAAa,WAAW,SAAS;AAC3C,YAAU;AAAA,IAAQ,CAAC,EAAE,OAAO,UAAU,IAAI,MACxC,WACI,MAAM,iBAAiB,OAAO,QAAQ,IACtC,MACA,MAAM,aAAa,OAAO,GAAG,IAC7B;AAAA,EACN;AAEA,QAAM,QAAQ,UAAU,qBAAqB;AAC7C,QAAM,MAAM,MAAM,QAAQ,OAAO;AACjC,MAAI,QAAQ,MAAM,QAAQ,SAAS;AACnC,SAAO;AACT;;;ACzCA,OAAO;AAGP,SAAS,QAAQ,QAAQ,WAAW,kBAAkB;AAsC/C,SAAS,QAAQ,QAAQ,UAAU,iBAAiB;AACzD,SAAO,CAAC,WAA2B;AACjC,eAAW,EAAE,MAAM;AACnB,WAAO,KAA+D;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,SAAS;;;ACjDtB,SAAS,aAAAA,kBAAiB;AAKnB,SAAS,QACdC,YACA,OACA,cAAc,WACd;AACA,QAAM,MAAM,eAAe;AAC3B,SAAO,CAAC,WAA2B;AACjC,YAAQC,WAAU,eAAe,EAAE,MAAM;AACzC,IAAAD,WAAU,GAAG,IAAI,EAAE,KAAK,QAAQ,MAAM;AAAA,EACxC;AACF;","names":["Lifecycle","container","Lifecycle"]}
1
+ {"version":3,"sources":["../../src/autometa-app.ts","../../src/autometa-world.ts","../../src/get-app.ts","../../src/decorators/fixture.ts","../../src/decorators/app-type.ts"],"sourcesContent":["import { World } from \"./fixtures.typings\";\n\nexport abstract class AutometaApp {\n [key: string]: unknown;\n world: World\n}\n","import { PhraseParser, IFromPhrase } from \"@autometa/phrases\";\n\n@PhraseParser\nexport class AutometaWorld {\n [key: string]: unknown;\n\n dfromPhrase: IFromPhrase;\n}\n","import { container } from \"tsyringe\";\nimport { AutometaApp } from \"./autometa-app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AutometaWorld } from \".\";\n\nexport function getApp<T extends AutometaApp, K extends AutometaWorld>(\n appType: Class<T>,\n worldType: Class<K>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...instances: { token: any; instance?: any; cls?: Class<any> }[]\n) {\n if (!appType) {\n throw new AutomationError(`A reference to an 'app' and 'world' is required to run tests.\n\nConfigure the app by extending 'AutometaApp' and adding it to your\n'autometa.config.ts' file:\n\n@AppType(MyWorld)\nexport class MyAutometaApp extends AutometaApp {\n ...\n}\ndefineConfig({\n roots: {\n app: './src/apps'\n }\n})`);\n }\n container.registerType(worldType, worldType);\n instances.forEach(({ token, instance, cls }) =>\n instance\n ? child.registerInstance(token, instance)\n : cls\n ? child.registerType(token, cls)\n : null\n );\n\n const child = container.createChildContainer();\n const app = child.resolve(appType);\n app.world = child.resolve(worldType);\n return app;\n}\n","import \"reflect-metadata\";\n\nimport { Class } from \"@autometa/types\";\nimport { scoped, inject, Lifecycle as LC, injectable } from \"tsyringe\";\n/**\n * Marks a class as an injectable fixture. Constructor parameters\n * which are also injectable will be automatically constructed\n * and passed to the constructor.\n *\n * Example fixtures are the `App` which acts as shared\n * entry point for all steps in a test, and the World,\n * which stores persistent data across tests.\n *\n * Fixtures are persistent by default, meaning each class\n * will exist as a singleton for the duration of the test\n * ```ts\n * @Fixture\n * export class World {\n * [key: string]: unknown;\n *\n * declare someExpectedData: MyDataType\n * }\n *\n * @Fixture\n * export class MyClient {\n * constructor(world: MyWorld){}\n *\n * login = async ()=>{\n * this.world.someExpectedData = await fetch(...)\n * }\n * }\n *\n * @Fixture\n * export class App {\n * constructor(\n * world: MyWorld,\n * client: MyClient\n * ){}\n * }\n * ```\n */\nexport function Fixture(target: Class<unknown>): void;\nexport function Fixture(scope?: LC): (target: Class<unknown>) => void;\nexport function Fixture(arg: LC | undefined | Class<unknown>) {\n if (arg && typeof arg !== \"number\") {\n injectable()(arg);\n scoped(LC.ContainerScoped)(arg);\n }\n return (target: Class<unknown>) => {\n injectable()(target);\n scoped(arg as LC.ContainerScoped | LC.ResolutionScoped)(target);\n };\n}\n\nexport const Inject = inject;\nexport const Lifecycle = LC;\n","import { Class } from \"@autometa/types\";\nimport { Lifecycle } from \"tsyringe\";\nimport { AutometaWorld } from \"..\";\nimport { Fixture } from \"./fixture\";\n\n\nexport function AppType(\n container: Record<string, { app: unknown; world: unknown; }>,\n world: Class<AutometaWorld>,\n environment = \"default\"\n) {\n const env = environment ?? \"default\";\n return (target: Class<unknown>) => {\n Fixture(Lifecycle.ContainerScoped)(target);\n container[env] = { app: target, world };\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAEO,IAAe,cAAf,MAA2B;AAGlC;;;ACLA,SAAS,oBAAiC;AAGnC,IAAM,gBAAN,MAAoB;AAI3B;AAJa,gBAAN;AAAA,EADN;AAAA,GACY;;;ACHb,SAAS,iBAAiB;AAG1B,SAAS,uBAAuB;AAGzB,SAAS,OACd,SACA,cAEG,WACH;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAa3B;AAAA,EACD;AACA,YAAU,aAAa,WAAW,SAAS;AAC3C,YAAU;AAAA,IAAQ,CAAC,EAAE,OAAO,UAAU,IAAI,MACxC,WACI,MAAM,iBAAiB,OAAO,QAAQ,IACtC,MACA,MAAM,aAAa,OAAO,GAAG,IAC7B;AAAA,EACN;AAEA,QAAM,QAAQ,UAAU,qBAAqB;AAC7C,QAAM,MAAM,MAAM,QAAQ,OAAO;AACjC,MAAI,QAAQ,MAAM,QAAQ,SAAS;AACnC,SAAO;AACT;;;ACzCA,OAAO;AAGP,SAAS,QAAQ,QAAQ,aAAa,IAAI,kBAAkB;AAwCrD,SAAS,QAAQ,KAAsC;AAC5D,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,eAAW,EAAE,GAAG;AAChB,WAAO,GAAG,eAAe,EAAE,GAAG;AAAA,EAChC;AACA,SAAO,CAAC,WAA2B;AACjC,eAAW,EAAE,MAAM;AACnB,WAAO,GAA+C,EAAE,MAAM;AAAA,EAChE;AACF;AAEO,IAAM,SAAS;AACf,IAAM,YAAY;;;ACtDzB,SAAS,aAAAA,kBAAiB;AAKnB,SAAS,QACdC,YACA,OACA,cAAc,WACd;AACA,QAAM,MAAM,eAAe;AAC3B,SAAO,CAAC,WAA2B;AACjC,YAAQC,WAAU,eAAe,EAAE,MAAM;AACzC,IAAAD,WAAU,GAAG,IAAI,EAAE,KAAK,QAAQ,MAAM;AAAA,EACxC;AACF;","names":["Lifecycle","container","Lifecycle"]}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { IFromPhrase } from '@autometa/phrases';
2
2
  import { Class } from '@autometa/types';
3
- import { Lifecycle, inject } from 'tsyringe';
3
+ import { Lifecycle as Lifecycle$1, inject } from 'tsyringe';
4
4
 
5
5
  interface World {
6
6
  }
@@ -15,7 +15,7 @@ declare abstract class AutometaApp {
15
15
 
16
16
  declare class AutometaWorld {
17
17
  [key: string]: unknown;
18
- fromPhrase: IFromPhrase;
18
+ dfromPhrase: IFromPhrase;
19
19
  }
20
20
 
21
21
  declare function getApp<T extends AutometaApp, K extends AutometaWorld>(appType: Class<T>, worldType: Class<K>, ...instances: {
@@ -61,12 +61,14 @@ declare function getApp<T extends AutometaApp, K extends AutometaWorld>(appType:
61
61
  * }
62
62
  * ```
63
63
  */
64
- declare function Fixture(scope?: Lifecycle): (target: Class<unknown>) => void;
64
+ declare function Fixture(target: Class<unknown>): void;
65
+ declare function Fixture(scope?: Lifecycle$1): (target: Class<unknown>) => void;
65
66
  declare const Inject: typeof inject;
67
+ declare const Lifecycle: typeof Lifecycle$1;
66
68
 
67
69
  declare function AppType(container: Record<string, {
68
70
  app: unknown;
69
71
  world: unknown;
70
72
  }>, world: Class<AutometaWorld>, environment?: string): (target: Class<unknown>) => void;
71
73
 
72
- export { App, AppType, AutometaApp, AutometaWorld, Fixture, Inject, World, getApp };
74
+ export { App, AppType, AutometaApp, AutometaWorld, Fixture, Inject, Lifecycle, World, getApp };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { IFromPhrase } from '@autometa/phrases';
2
2
  import { Class } from '@autometa/types';
3
- import { Lifecycle, inject } from 'tsyringe';
3
+ import { Lifecycle as Lifecycle$1, inject } from 'tsyringe';
4
4
 
5
5
  interface World {
6
6
  }
@@ -15,7 +15,7 @@ declare abstract class AutometaApp {
15
15
 
16
16
  declare class AutometaWorld {
17
17
  [key: string]: unknown;
18
- fromPhrase: IFromPhrase;
18
+ dfromPhrase: IFromPhrase;
19
19
  }
20
20
 
21
21
  declare function getApp<T extends AutometaApp, K extends AutometaWorld>(appType: Class<T>, worldType: Class<K>, ...instances: {
@@ -61,12 +61,14 @@ declare function getApp<T extends AutometaApp, K extends AutometaWorld>(appType:
61
61
  * }
62
62
  * ```
63
63
  */
64
- declare function Fixture(scope?: Lifecycle): (target: Class<unknown>) => void;
64
+ declare function Fixture(target: Class<unknown>): void;
65
+ declare function Fixture(scope?: Lifecycle$1): (target: Class<unknown>) => void;
65
66
  declare const Inject: typeof inject;
67
+ declare const Lifecycle: typeof Lifecycle$1;
66
68
 
67
69
  declare function AppType(container: Record<string, {
68
70
  app: unknown;
69
71
  world: unknown;
70
72
  }>, world: Class<AutometaWorld>, environment?: string): (target: Class<unknown>) => void;
71
73
 
72
- export { App, AppType, AutometaApp, AutometaWorld, Fixture, Inject, World, getApp };
74
+ export { App, AppType, AutometaApp, AutometaWorld, Fixture, Inject, Lifecycle, World, getApp };
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ __export(src_exports, {
34
34
  AutometaWorld: () => AutometaWorld,
35
35
  Fixture: () => Fixture,
36
36
  Inject: () => Inject,
37
+ Lifecycle: () => Lifecycle,
37
38
  getApp: () => getApp
38
39
  });
39
40
  module.exports = __toCommonJS(src_exports);
@@ -83,15 +84,18 @@ defineConfig({
83
84
  // src/decorators/fixture.ts
84
85
  var import_reflect_metadata = require("reflect-metadata");
85
86
  var import_tsyringe2 = require("tsyringe");
86
- function Fixture(scope = import_tsyringe2.Lifecycle.ContainerScoped) {
87
+ function Fixture(arg) {
88
+ if (arg && typeof arg !== "number") {
89
+ (0, import_tsyringe2.injectable)()(arg);
90
+ (0, import_tsyringe2.scoped)(import_tsyringe2.Lifecycle.ContainerScoped)(arg);
91
+ }
87
92
  return (target) => {
88
93
  (0, import_tsyringe2.injectable)()(target);
89
- (0, import_tsyringe2.scoped)(scope)(
90
- target
91
- );
94
+ (0, import_tsyringe2.scoped)(arg)(target);
92
95
  };
93
96
  }
94
97
  var Inject = import_tsyringe2.inject;
98
+ var Lifecycle = import_tsyringe2.Lifecycle;
95
99
 
96
100
  // src/decorators/app-type.ts
97
101
  var import_tsyringe3 = require("tsyringe");
@@ -109,6 +113,7 @@ function AppType(container2, world, environment = "default") {
109
113
  AutometaWorld,
110
114
  Fixture,
111
115
  Inject,
116
+ Lifecycle,
112
117
  getApp
113
118
  });
114
119
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/autometa-app.ts","../src/autometa-world.ts","../src/get-app.ts","../src/decorators/fixture.ts","../src/decorators/app-type.ts"],"sourcesContent":["export * from './autometa-app'\nexport * from './autometa-world'\nexport * from './get-app'\nexport * from './decorators'\nexport * from './fixtures.typings'","import { World } from \"./fixtures.typings\";\n\nexport abstract class AutometaApp {\n [key: string]: unknown;\n world: World\n}\n","import { PhraseParser, IFromPhrase } from \"@autometa/phrases\";\n\n@PhraseParser\nexport class AutometaWorld {\n [key: string]: unknown;\n\n fromPhrase: IFromPhrase;\n}\n","import { container } from \"tsyringe\";\nimport { AutometaApp } from \"./autometa-app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AutometaWorld } from \".\";\n\nexport function getApp<T extends AutometaApp, K extends AutometaWorld>(\n appType: Class<T>,\n worldType: Class<K>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...instances: { token: any; instance?: any; cls?: Class<any> }[]\n) {\n if (!appType) {\n throw new AutomationError(`A reference to an 'app' and 'world' is required to run tests.\n\nConfigure the app by extending 'AutometaApp' and adding it to your\n'autometa.config.ts' file:\n\n@AppType(MyWorld)\nexport class MyAutometaApp extends AutometaApp {\n ...\n}\ndefineConfig({\n roots: {\n app: './src/apps'\n }\n})`);\n }\n container.registerType(worldType, worldType);\n instances.forEach(({ token, instance, cls }) =>\n instance\n ? child.registerInstance(token, instance)\n : cls\n ? child.registerType(token, cls)\n : null\n );\n\n const child = container.createChildContainer();\n const app = child.resolve(appType);\n app.world = child.resolve(worldType);\n return app;\n}\n","import \"reflect-metadata\";\n\nimport { Class } from \"@autometa/types\";\nimport { scoped, inject, Lifecycle, injectable } from \"tsyringe\";\n/**\n * Marks a class as an injectable fixture. Constructor parameters\n * which are also injectable will be automatically constructed\n * and passed to the constructor.\n *\n * Example fixtures are the `App` which acts as shared\n * entry point for all steps in a test, and the World,\n * which stores persistent data across tests.\n *\n * Fixtures are persistent by default, meaning each class\n * will exist as a singleton for the duration of the test\n * ```ts\n * @Fixture\n * export class World {\n * [key: string]: unknown;\n *\n * declare someExpectedData: MyDataType\n * }\n *\n * @Fixture\n * export class MyClient {\n * constructor(world: MyWorld){}\n *\n * login = async ()=>{\n * this.world.someExpectedData = await fetch(...)\n * }\n * }\n *\n * @Fixture\n * export class App {\n * constructor(\n * world: MyWorld,\n * client: MyClient\n * ){}\n * }\n * ```\n */\nexport function Fixture(scope = Lifecycle.ContainerScoped) {\n return (target: Class<unknown>) => {\n injectable()(target);\n scoped(scope as Lifecycle.ContainerScoped | Lifecycle.ResolutionScoped)(\n target\n );\n };\n}\n\nexport const Inject = inject;\n\n\n","import { Class } from \"@autometa/types\";\nimport { Lifecycle } from \"tsyringe\";\nimport { AutometaWorld } from \"..\";\nimport { Fixture } from \"./fixture\";\n\n\nexport function AppType(\n container: Record<string, { app: unknown; world: unknown; }>,\n world: Class<AutometaWorld>,\n environment = \"default\"\n) {\n const env = environment ?? \"default\";\n return (target: Class<unknown>) => {\n Fixture(Lifecycle.ContainerScoped)(target);\n container[env] = { app: target, world };\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAe,cAAf,MAA2B;AAGlC;;;ACLA,qBAA0C;AAGnC,IAAM,gBAAN,MAAoB;AAI3B;AAJa,gBAAN;AAAA,EADN;AAAA,GACY;;;ACHb,sBAA0B;AAG1B,oBAAgC;AAGzB,SAAS,OACd,SACA,cAEG,WACH;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,8BAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAa3B;AAAA,EACD;AACA,4BAAU,aAAa,WAAW,SAAS;AAC3C,YAAU;AAAA,IAAQ,CAAC,EAAE,OAAO,UAAU,IAAI,MACxC,WACI,MAAM,iBAAiB,OAAO,QAAQ,IACtC,MACA,MAAM,aAAa,OAAO,GAAG,IAC7B;AAAA,EACN;AAEA,QAAM,QAAQ,0BAAU,qBAAqB;AAC7C,QAAM,MAAM,MAAM,QAAQ,OAAO;AACjC,MAAI,QAAQ,MAAM,QAAQ,SAAS;AACnC,SAAO;AACT;;;ACzCA,8BAAO;AAGP,IAAAA,mBAAsD;AAsC/C,SAAS,QAAQ,QAAQ,2BAAU,iBAAiB;AACzD,SAAO,CAAC,WAA2B;AACjC,qCAAW,EAAE,MAAM;AACnB,iCAAO,KAA+D;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,SAAS;;;ACjDtB,IAAAC,mBAA0B;AAKnB,SAAS,QACdC,YACA,OACA,cAAc,WACd;AACA,QAAM,MAAM,eAAe;AAC3B,SAAO,CAAC,WAA2B;AACjC,YAAQ,2BAAU,eAAe,EAAE,MAAM;AACzC,IAAAA,WAAU,GAAG,IAAI,EAAE,KAAK,QAAQ,MAAM;AAAA,EACxC;AACF;","names":["import_tsyringe","import_tsyringe","container"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/autometa-app.ts","../src/autometa-world.ts","../src/get-app.ts","../src/decorators/fixture.ts","../src/decorators/app-type.ts"],"sourcesContent":["export * from './autometa-app'\nexport * from './autometa-world'\nexport * from './get-app'\nexport * from './decorators'\nexport * from './fixtures.typings'","import { World } from \"./fixtures.typings\";\n\nexport abstract class AutometaApp {\n [key: string]: unknown;\n world: World\n}\n","import { PhraseParser, IFromPhrase } from \"@autometa/phrases\";\n\n@PhraseParser\nexport class AutometaWorld {\n [key: string]: unknown;\n\n dfromPhrase: IFromPhrase;\n}\n","import { container } from \"tsyringe\";\nimport { AutometaApp } from \"./autometa-app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AutometaWorld } from \".\";\n\nexport function getApp<T extends AutometaApp, K extends AutometaWorld>(\n appType: Class<T>,\n worldType: Class<K>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...instances: { token: any; instance?: any; cls?: Class<any> }[]\n) {\n if (!appType) {\n throw new AutomationError(`A reference to an 'app' and 'world' is required to run tests.\n\nConfigure the app by extending 'AutometaApp' and adding it to your\n'autometa.config.ts' file:\n\n@AppType(MyWorld)\nexport class MyAutometaApp extends AutometaApp {\n ...\n}\ndefineConfig({\n roots: {\n app: './src/apps'\n }\n})`);\n }\n container.registerType(worldType, worldType);\n instances.forEach(({ token, instance, cls }) =>\n instance\n ? child.registerInstance(token, instance)\n : cls\n ? child.registerType(token, cls)\n : null\n );\n\n const child = container.createChildContainer();\n const app = child.resolve(appType);\n app.world = child.resolve(worldType);\n return app;\n}\n","import \"reflect-metadata\";\n\nimport { Class } from \"@autometa/types\";\nimport { scoped, inject, Lifecycle as LC, injectable } from \"tsyringe\";\n/**\n * Marks a class as an injectable fixture. Constructor parameters\n * which are also injectable will be automatically constructed\n * and passed to the constructor.\n *\n * Example fixtures are the `App` which acts as shared\n * entry point for all steps in a test, and the World,\n * which stores persistent data across tests.\n *\n * Fixtures are persistent by default, meaning each class\n * will exist as a singleton for the duration of the test\n * ```ts\n * @Fixture\n * export class World {\n * [key: string]: unknown;\n *\n * declare someExpectedData: MyDataType\n * }\n *\n * @Fixture\n * export class MyClient {\n * constructor(world: MyWorld){}\n *\n * login = async ()=>{\n * this.world.someExpectedData = await fetch(...)\n * }\n * }\n *\n * @Fixture\n * export class App {\n * constructor(\n * world: MyWorld,\n * client: MyClient\n * ){}\n * }\n * ```\n */\nexport function Fixture(target: Class<unknown>): void;\nexport function Fixture(scope?: LC): (target: Class<unknown>) => void;\nexport function Fixture(arg: LC | undefined | Class<unknown>) {\n if (arg && typeof arg !== \"number\") {\n injectable()(arg);\n scoped(LC.ContainerScoped)(arg);\n }\n return (target: Class<unknown>) => {\n injectable()(target);\n scoped(arg as LC.ContainerScoped | LC.ResolutionScoped)(target);\n };\n}\n\nexport const Inject = inject;\nexport const Lifecycle = LC;\n","import { Class } from \"@autometa/types\";\nimport { Lifecycle } from \"tsyringe\";\nimport { AutometaWorld } from \"..\";\nimport { Fixture } from \"./fixture\";\n\n\nexport function AppType(\n container: Record<string, { app: unknown; world: unknown; }>,\n world: Class<AutometaWorld>,\n environment = \"default\"\n) {\n const env = environment ?? \"default\";\n return (target: Class<unknown>) => {\n Fixture(Lifecycle.ContainerScoped)(target);\n container[env] = { app: target, world };\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAe,cAAf,MAA2B;AAGlC;;;ACLA,qBAA0C;AAGnC,IAAM,gBAAN,MAAoB;AAI3B;AAJa,gBAAN;AAAA,EADN;AAAA,GACY;;;ACHb,sBAA0B;AAG1B,oBAAgC;AAGzB,SAAS,OACd,SACA,cAEG,WACH;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,8BAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAa3B;AAAA,EACD;AACA,4BAAU,aAAa,WAAW,SAAS;AAC3C,YAAU;AAAA,IAAQ,CAAC,EAAE,OAAO,UAAU,IAAI,MACxC,WACI,MAAM,iBAAiB,OAAO,QAAQ,IACtC,MACA,MAAM,aAAa,OAAO,GAAG,IAC7B;AAAA,EACN;AAEA,QAAM,QAAQ,0BAAU,qBAAqB;AAC7C,QAAM,MAAM,MAAM,QAAQ,OAAO;AACjC,MAAI,QAAQ,MAAM,QAAQ,SAAS;AACnC,SAAO;AACT;;;ACzCA,8BAAO;AAGP,IAAAA,mBAA4D;AAwCrD,SAAS,QAAQ,KAAsC;AAC5D,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,qCAAW,EAAE,GAAG;AAChB,iCAAO,iBAAAC,UAAG,eAAe,EAAE,GAAG;AAAA,EAChC;AACA,SAAO,CAAC,WAA2B;AACjC,qCAAW,EAAE,MAAM;AACnB,iCAAO,GAA+C,EAAE,MAAM;AAAA,EAChE;AACF;AAEO,IAAM,SAAS;AACf,IAAM,YAAY,iBAAAA;;;ACtDzB,IAAAC,mBAA0B;AAKnB,SAAS,QACdC,YACA,OACA,cAAc,WACd;AACA,QAAM,MAAM,eAAe;AAC3B,SAAO,CAAC,WAA2B;AACjC,YAAQ,2BAAU,eAAe,EAAE,MAAM;AACzC,IAAAA,WAAU,GAAG,IAAI,EAAE,KAAK,QAAQ,MAAM;AAAA,EACxC;AACF;","names":["import_tsyringe","LC","import_tsyringe","container"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autometa/app",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "App and World container for Autometa",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,6 @@
14
14
  },
15
15
  "license": "MIT",
16
16
  "devDependencies": {
17
- "@autometa/types": "^0.4.0",
18
17
  "@types/node": "^18.11.18",
19
18
  "@types/uuid": "^9.0.1",
20
19
  "@typescript-eslint/eslint-plugin": "^5.54.1",
@@ -28,10 +27,10 @@
28
27
  "datetime": "link:packages/datetime",
29
28
  "errors": "link:packages/errors",
30
29
  "eslint": "^8.37.0",
31
- "eslint-config-custom": "0.6.0",
32
30
  "eslint-config-prettier": "^8.3.0",
33
31
  "events": "link:packages/events",
34
32
  "gherkin": "link:packages/gherkin",
33
+ "istanbul": "^0.4.5",
35
34
  "jest-executor": "link:packages/jest-executor",
36
35
  "jest-transformer": "link:packages/jest-transformer",
37
36
  "phrases": "link:packages/phrases",
@@ -40,20 +39,22 @@
40
39
  "scopes": "link:packages/scopes",
41
40
  "test-builder": "link:packages/test-builder",
42
41
  "test-executor": "link:packages/test-executor",
43
- "tsconfig": " *",
44
42
  "tsup": "^7.2.0",
45
43
  "types": "link:packages/types",
46
44
  "typescript": "^4.9.5",
47
- "vitest": "0.33.0"
45
+ "vitest": "0.33.0",
46
+ "@autometa/types": "^0.4.0",
47
+ "tsconfig": "0.7.0",
48
+ "eslint-config-custom": "0.6.0"
48
49
  },
49
50
  "dependencies": {
50
- "@autometa/asserters": "0.1.0",
51
- "@autometa/errors": "0.1.0",
52
- "@autometa/phrases": "0.1.1",
53
- "tsyringe": "^4.8.0"
51
+ "tsyringe": "^4.8.0",
52
+ "@autometa/errors": "0.1.1",
53
+ "@autometa/asserters": "0.1.1",
54
+ "@autometa/phrases": "0.1.2"
54
55
  },
55
56
  "scripts": {
56
- "test": "vitest run --passWithNoTests",
57
+ "test": "vitest run",
57
58
  "coverage": "vitest run --coverage",
58
59
  "prettify": "prettier --config .prettierrc 'src/**/*.ts' --write",
59
60
  "lint": "eslint . --max-warnings 0",
@@ -61,6 +62,5 @@
61
62
  "clean": "rimraf dist",
62
63
  "build": "tsup",
63
64
  "build:watch": "tsup --watch"
64
- },
65
- "readme": "# Introduction\n\nThere's nothing here yet"
65
+ }
66
66
  }