@joist/di 1.8.10 → 2.0.0-alpha.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.
Files changed (48) hide show
  1. package/README.md +50 -46
  2. package/package.json +7 -15
  3. package/target/{dom → build}/lib/environment.d.ts +2 -1
  4. package/target/{dom → build}/lib/environment.js +3 -3
  5. package/target/build/lib/environment.js.map +1 -0
  6. package/target/build/lib/injectable.d.ts +13 -0
  7. package/target/build/lib/injectable.js +17 -0
  8. package/target/build/lib/injectable.js.map +1 -0
  9. package/target/{lib → build/lib}/injector.d.ts +1 -0
  10. package/target/{lib → build/lib}/injector.js +5 -3
  11. package/target/build/lib/injector.js.map +1 -0
  12. package/target/{lib → build/lib}/provider.d.ts +0 -0
  13. package/target/{lib → build/lib}/provider.js +0 -0
  14. package/target/{lib → build/lib}/provider.js.map +1 -1
  15. package/target/build/lib/service.d.ts +2 -0
  16. package/target/build/lib/service.js +5 -0
  17. package/target/build/lib/service.js.map +1 -0
  18. package/target/build/lib/utils.d.ts +4 -0
  19. package/target/build/lib/utils.js +8 -0
  20. package/target/build/lib/utils.js.map +1 -0
  21. package/target/build/lib.d.ts +6 -0
  22. package/target/build/lib.js +6 -0
  23. package/target/build/lib.js.map +1 -0
  24. package/dom/package.json +0 -4
  25. package/dom_testing/package.json +0 -4
  26. package/target/dom/lib/element-injector.d.ts +0 -4
  27. package/target/dom/lib/element-injector.js +0 -8
  28. package/target/dom/lib/element-injector.js.map +0 -1
  29. package/target/dom/lib/environment.js.map +0 -1
  30. package/target/dom/lib/injector.d.ts +0 -319
  31. package/target/dom/lib/injector.js +0 -46
  32. package/target/dom/lib/injector.js.map +0 -1
  33. package/target/dom/lib.d.ts +0 -2
  34. package/target/dom/lib.js +0 -3
  35. package/target/dom/lib.js.map +0 -1
  36. package/target/dom_testing/lib.d.ts +0 -12
  37. package/target/dom_testing/lib.js +0 -30
  38. package/target/dom_testing/lib.js.map +0 -1
  39. package/target/lib/inject.d.ts +0 -4
  40. package/target/lib/inject.js +0 -11
  41. package/target/lib/inject.js.map +0 -1
  42. package/target/lib/injector.js.map +0 -1
  43. package/target/lib/service.d.ts +0 -3
  44. package/target/lib/service.js +0 -9
  45. package/target/lib/service.js.map +0 -1
  46. package/target/lib.d.ts +0 -4
  47. package/target/lib.js +0 -5
  48. package/target/lib.js.map +0 -1
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  # Di
2
2
 
3
- Dependency Injection in ~800 bytes
3
+ Dependency Injection in ~800 bytes.
4
4
 
5
5
  #### Installation:
6
6
 
7
7
  ```BASH
8
- npm i @joist/di
8
+ npm i @joist/di@alpha
9
9
  ```
10
10
 
11
11
  #### Example:
12
12
 
13
13
  ```TS
14
- import { Injector, inject } from '@joist/di';
14
+ import { Injector } from '@joist/di';
15
15
 
16
16
  class FooService {
17
17
  sayHello() {
@@ -20,10 +20,12 @@ class FooService {
20
20
  }
21
21
 
22
22
  class BarService {
23
- constructor(@inject(FooService) private foo: FooService) {}
23
+ static deps = [FooService];
24
+
25
+ constructor(private foo: FooService) {}
24
26
 
25
27
  sayHello() {
26
- return 'Hello From BarService and ' + this.foo.sayHello();
28
+ return this.foo.sayHello();
27
29
  }
28
30
  }
29
31
 
@@ -44,7 +46,9 @@ class FooService {
44
46
  }
45
47
 
46
48
  class BarService {
47
- constructor(@inject(FooService) private foo: FooService) {}
49
+ static deps = [FooService];
50
+
51
+ constructor(private foo: FooService) {}
48
52
 
49
53
  sayHello() {
50
54
  return 'Hello From BarService and ' + this.foo.sayHello();
@@ -70,12 +74,12 @@ app.get(BarService).sayHello(); // Hello from BarService and IT HAS BEEN OVERRID
70
74
 
71
75
  #### Root Service
72
76
 
73
- If you have nested injectors and you still want singleton instances decorator your services with `@service()`
77
+ If you have nested injectors and you want to make sure the same instance is provided to all decorate your service with `@service()`.
74
78
 
75
79
  ```TS
76
80
  import { service } from '@joist/di';
77
81
 
78
- @service()
82
+ @service
79
83
  class FooService {
80
84
  sayHello() {
81
85
  return 'Hello From FooService';
@@ -83,62 +87,62 @@ class FooService {
83
87
  }
84
88
  ```
85
89
 
86
- #### Custom Elements
90
+ ## Custom Elements
91
+
92
+ Joist DI was built with custom elements in mind. Custom elements are an example where you do not have direct control over how your classes are instantiated.
93
+
94
+ Since the browser will be what initializes your custom elements we need to be able to tell the browser how to pass arguments.
87
95
 
88
- Joist DI was built with custom elements in mind. When you install `@joist/di` you also get the dom library.
96
+ The `@injectable` decorator allows the Joist Dependency Injector to pass arguments to your custom element when instances of your element is created.
97
+
98
+ `@injectable` is on required when you will not be able to manually create instances via an injector.
99
+
100
+ #### Inject dependency into your custom element constructor
89
101
 
90
102
  ```TS
91
- import { JoistDi, get } from '@joist/di/dom';
103
+ import { inject, service, injectable } from '@joist/di';
104
+
105
+ @service
106
+ class MyService {}
92
107
 
93
- class MyElement extends JoistDi(HTMlElement) {
94
- @get(FooService)
95
- myService!: MyService;
108
+ @injectable
109
+ class MyElement extends HTMLElement {
110
+ static deps = [MyService];
111
+
112
+ constructor(public myService: MyService) {}
96
113
  }
97
114
 
98
115
  customElements.define('my-element', MyElement);
99
116
  ```
100
117
 
101
- #### Hierarchy
118
+ #### Define providers and overrides
102
119
 
103
- The JoistDi mixin is hierarchical, meaing a component will inherit from it's parent if it has one.
104
- For example:
120
+ This allows your to override services for different environments or scenarios
105
121
 
106
122
  ```TS
107
- import { JoistDi, get } from '@joist/di/dom';
123
+ import { defineEnvironment, injectable } from '@joist/di';
108
124
 
109
125
  class Config {
110
- name = 'Foo Bar'
126
+ apiUrl = 'http://localhost:4000/api/'
111
127
  }
112
128
 
113
- const CustomRoot = JoistDi(HTMLElement, {
114
- providers: [
115
- { provide: Config, use: class { name = 'Danny Blue' } }
116
- ]
117
- });
129
+ defineEnvironment([
130
+ {
131
+ provide: Config,
132
+ use: class extends Config {
133
+ apiUrl = 'http://real-api/api/'
134
+ }
135
+ }
136
+ ]);
118
137
 
119
- class Parent extends CustomRoot {}
138
+ @injectable
139
+ class MyElement extends HTMLElement {
140
+ static deps = [Config];
120
141
 
121
- class Child extends JoistDi(HTMLElement) {
122
- @get(Config)
123
- public config!: Config;
142
+ constructor(config: Config) {
143
+ console.log(config.apiUrl); // http://real-api/api/
144
+ }
124
145
  }
125
146
 
126
- customElements.define('my-parent', Parent);
127
- customElements.define('my-child', Child);
128
- ```
129
-
130
- ```HTML
131
- <my-child id="child-1"></my-child>
132
-
133
- <my-parent>
134
- <my-child id="child-2"></my-child>
135
- </my-parent>
136
-
137
- <script type="module">
138
- const child1 = document.getElementById("child-1");
139
- const child2 = document.getElementById("child-2");
140
-
141
- console.log(child1.config.name); // Foo Bar
142
- console.log(child2.config.name); // Danny Blue
143
- </script>
147
+ customElements.define('my-element', MyElement);
144
148
  ```
package/package.json CHANGED
@@ -1,23 +1,15 @@
1
1
  {
2
2
  "name": "@joist/di",
3
- "version": "1.8.10",
3
+ "version": "2.0.0-alpha.2",
4
+ "main": "./target/build/lib.js",
5
+ "module": "./target/build/lib.js",
4
6
  "exports": {
5
7
  ".": {
6
- "import": "./target/lib.js"
7
- },
8
- "./dom": {
9
- "import": "./target/dom/lib.js"
10
- },
11
- "./dom_testing": {
12
- "import": "./target/dom_testing/lib.js"
8
+ "import": "./target/build/lib.js"
13
9
  }
14
10
  },
15
- "main": "target/lib.js",
16
- "module": "target/lib.js",
17
11
  "files": [
18
- "target",
19
- "dom/package.json",
20
- "dom_testing/package.json"
12
+ "target/build"
21
13
  ],
22
14
  "sideEffects": false,
23
15
  "description": "Dependency Injection in ~800 bytes",
@@ -39,8 +31,8 @@
39
31
  "access": "public"
40
32
  },
41
33
  "scripts": {
42
- "test": "wtr **/*.spec.ts --config ../../wtr.config.js",
34
+ "test": "tsc -p tsconfig.test.json && wtr --config ../../wtr.config.mjs --port 8001",
43
35
  "build": "tsc -p tsconfig.build.json"
44
36
  },
45
- "gitHead": "7c562502b4a5ad481f66eff5b8c28855d8e77735"
37
+ "gitHead": "7bf6691cd374a438ae21264f6c27ed82ae04f0d3"
46
38
  }
@@ -1,4 +1,5 @@
1
- import { Injector, Provider } from '@joist/di';
1
+ import { Injector } from './injector';
2
+ import { Provider } from './provider';
2
3
  export declare function defineEnvironment(providers?: Provider<any>[]): Injector;
3
4
  export declare function getEnvironmentRef(): Injector;
4
5
  export declare function clearEnvironment(): void;
@@ -1,5 +1,5 @@
1
- import { Injector } from '@joist/di';
2
- let rootInjector;
1
+ import { Injector } from './injector';
2
+ let rootInjector = null;
3
3
  export function defineEnvironment(providers = []) {
4
4
  rootInjector = new Injector({ providers });
5
5
  return rootInjector;
@@ -11,6 +11,6 @@ export function getEnvironmentRef() {
11
11
  return defineEnvironment();
12
12
  }
13
13
  export function clearEnvironment() {
14
- rootInjector = undefined;
14
+ rootInjector = null;
15
15
  }
16
16
  //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../lib/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,IAAI,YAAY,GAAoB,IAAI,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAAC,YAA6B,EAAE;IAC/D,YAAY,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAE3C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;IAED,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Provider, ProviderToken } from './provider';
2
+ export interface Injectable {
3
+ deps: ProviderToken<any>[];
4
+ providers?: Provider<any>[];
5
+ new (...args: any[]): any;
6
+ }
7
+ export declare function injectable<T extends Injectable>(Clazz: T): {
8
+ new (...args: any[]): {
9
+ [x: string]: any;
10
+ };
11
+ deps: ProviderToken<any>[];
12
+ providers?: Provider<any>[] | undefined;
13
+ } & T;
@@ -0,0 +1,17 @@
1
+ import { getEnvironmentRef } from './environment';
2
+ import { Injector } from './injector';
3
+ export function injectable(Clazz) {
4
+ const { deps, providers } = Clazz;
5
+ return class InjectableElement extends Clazz {
6
+ constructor(...args) {
7
+ if (args.length || !deps.length) {
8
+ super(...args);
9
+ }
10
+ else {
11
+ const i = new Injector({ providers }, getEnvironmentRef());
12
+ super(...deps.map((dep) => i.get(dep)));
13
+ }
14
+ }
15
+ };
16
+ }
17
+ //# sourceMappingURL=injectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../../lib/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUtC,MAAM,UAAU,UAAU,CAAuB,KAAQ;IACvD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAElC,OAAO,MAAM,iBAAkB,SAAQ,KAAK;QAC1C,YAAY,GAAG,IAAW;YACxB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC/B,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;aAChB;iBAAM;gBACL,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAE3D,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -15,6 +15,7 @@ export declare class Injector {
15
15
  parent?: Injector | undefined;
16
16
  private providerMap;
17
17
  constructor(options?: InjectorOptions, parent?: Injector | undefined);
18
+ setParent(parent?: Injector): void;
18
19
  /**
19
20
  * recursively check if a singleton instance is available for a provider
20
21
  */
@@ -1,5 +1,4 @@
1
- import { getProviderDeps } from './inject';
2
- import { isProvidedInRoot } from './service';
1
+ import { readProviderDeps, isProvidedInRoot } from './utils';
3
2
  /**
4
3
  * Create an instance of a Dependency injector.
5
4
  * Can be used to create a singleton of any class that is property annotated with dependencies.
@@ -16,6 +15,9 @@ export class Injector {
16
15
  this.options.bootstrap.forEach((provider) => this.get(provider));
17
16
  }
18
17
  }
18
+ setParent(parent) {
19
+ this.parent = parent;
20
+ }
19
21
  /**
20
22
  * recursively check if a singleton instance is available for a provider
21
23
  */
@@ -43,7 +45,7 @@ export class Injector {
43
45
  return instance;
44
46
  }
45
47
  create(P) {
46
- const deps = getProviderDeps(P);
48
+ const deps = readProviderDeps(P);
47
49
  return new P(...deps.map((dep) => this.get(dep)));
48
50
  }
49
51
  resolve(token) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../lib/injector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAO7D;;;;;;GAMG;AACH,MAAM,OAAO,QAAQ;IAGnB,YAAmB,UAA2B,EAAE,EAAS,MAAiB;QAAvD,YAAO,GAAP,OAAO,CAAsB;QAAS,WAAM,GAAN,MAAM,CAAW;QAFlE,gBAAW,GAAG,IAAI,OAAO,EAA2B,CAAC;QAG3D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;SAClE;IACH,CAAC;IAED,SAAS,CAAC,MAAiB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAAyB;QAC3B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,GAAG,CAAI,KAAuB;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,IAAI,QAAQ,GAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAI,CAAwB;QAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAEO,OAAO,CAAI,KAAuB;QACxC,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,QAAQ,EAAE;YACZ,kEAAkE;YAClE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YACtE,qFAAqF;YACrF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,kDAAkD;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAA8B,CAAC,CAAC;IACrD,CAAC;IAEO,YAAY,CAAC,KAAyB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;IAC/E,CAAC;CACF"}
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../lib/provider.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../lib/provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { ProviderToken } from '../lib/provider';
2
+ export declare function service(provider: ProviderToken<any>): any;
@@ -0,0 +1,5 @@
1
+ export function service(provider) {
2
+ Object.defineProperty(provider, 'provideInRoot', { value: true });
3
+ return provider;
4
+ }
5
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../lib/service.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,OAAO,CAAC,QAA4B;IAClD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ProviderToken } from './provider';
2
+ export declare const PROVIDER_DEPS_KEY = "deps";
3
+ export declare function readProviderDeps(provider: ProviderToken<any>): ProviderToken<any>[];
4
+ export declare function isProvidedInRoot(provider: ProviderToken<any>): any;
@@ -0,0 +1,8 @@
1
+ export const PROVIDER_DEPS_KEY = 'deps';
2
+ export function readProviderDeps(provider) {
3
+ return provider[PROVIDER_DEPS_KEY] || provider.prototype[PROVIDER_DEPS_KEY] || [];
4
+ }
5
+ export function isProvidedInRoot(provider) {
6
+ return provider.provideInRoot || false;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,OAAO,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { Injector, InjectorOptions } from './lib/injector';
2
+ export { Provider, ProviderToken } from './lib/provider';
3
+ export { readProviderDeps } from './lib/utils';
4
+ export { service } from './lib/service';
5
+ export { getEnvironmentRef, defineEnvironment } from './lib/environment';
6
+ export { injectable } from './lib/injectable';
@@ -0,0 +1,6 @@
1
+ export { Injector } from './lib/injector';
2
+ export { readProviderDeps } from './lib/utils';
3
+ export { service } from './lib/service';
4
+ export { getEnvironmentRef, defineEnvironment } from './lib/environment';
5
+ export { injectable } from './lib/injectable';
6
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dom/package.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "main": "../target/dom/lib.js",
3
- "module": "../target/dom/lib.js"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "main": "../target/dom_testing/lib.js",
3
- "module": "../target/dom_testing/lib.js"
4
- }
@@ -1,4 +0,0 @@
1
- import { Injector } from '@joist/di';
2
- export declare class ElementInjector extends Injector {
3
- createEl(Target: Function, newTarget?: any): any;
4
- }
@@ -1,8 +0,0 @@
1
- import { Injector, getProviderDeps } from '@joist/di';
2
- export class ElementInjector extends Injector {
3
- createEl(Target, newTarget) {
4
- const deps = getProviderDeps(Target);
5
- return Reflect.construct(Target, deps.map((dep) => this.get(dep)), newTarget);
6
- }
7
- }
8
- //# sourceMappingURL=element-injector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-injector.js","sourceRoot":"","sources":["../../../dom/lib/element-injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,MAAgB,EAAE,SAAe;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAErC,OAAO,OAAO,CAAC,SAAS,CACtB,MAAM,EACN,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAChC,SAAS,CACV,CAAC;IACJ,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../dom/lib/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,MAAM,WAAW,CAAC;AAE/C,IAAI,YAAkC,CAAC;AAEvC,MAAM,UAAU,iBAAiB,CAAC,YAA6B,EAAE;IAC/D,YAAY,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAE3C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;IAED,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC"}
@@ -1,319 +0,0 @@
1
- import { ProviderToken, Injector, Provider } from '@joist/di';
2
- export declare const ROOT_ATTR = "__joist__injector__root__";
3
- export interface InjectorBase {
4
- injector: Injector;
5
- }
6
- /**
7
- * Takes an InjectionToken and resolves that token to a service
8
- */
9
- export declare function get<T>(token: ProviderToken<T>): (target: InjectorBase, key: string) => void;
10
- export interface JoistDiConfig {
11
- providers: Provider<any>[];
12
- }
13
- /**
14
- * Mixin that applies an injector to a base class
15
- */
16
- export declare function JoistDi<T extends new (...args: any[]) => HTMLElement>(Base: T, config?: JoistDiConfig): {
17
- new (..._: any[]): {
18
- injector: Injector;
19
- connectedCallback(): void;
20
- disconnectedCallback(): void;
21
- accessKey: string;
22
- readonly accessKeyLabel: string;
23
- autocapitalize: string;
24
- dir: string;
25
- draggable: boolean;
26
- hidden: boolean;
27
- innerText: string;
28
- lang: string;
29
- readonly offsetHeight: number;
30
- readonly offsetLeft: number;
31
- readonly offsetParent: Element | null;
32
- readonly offsetTop: number;
33
- readonly offsetWidth: number;
34
- outerText: string;
35
- spellcheck: boolean;
36
- title: string;
37
- translate: boolean;
38
- click(): void;
39
- addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
40
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
41
- removeEventListener<K_1 extends keyof HTMLElementEventMap>(type: K_1, listener: (this: HTMLElement, ev: HTMLElementEventMap[K_1]) => any, options?: boolean | EventListenerOptions | undefined): void;
42
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
43
- readonly attributes: NamedNodeMap;
44
- readonly classList: DOMTokenList;
45
- className: string;
46
- readonly clientHeight: number;
47
- readonly clientLeft: number;
48
- readonly clientTop: number;
49
- readonly clientWidth: number;
50
- id: string;
51
- readonly localName: string;
52
- readonly namespaceURI: string | null;
53
- onfullscreenchange: ((this: Element, ev: Event) => any) | null;
54
- onfullscreenerror: ((this: Element, ev: Event) => any) | null;
55
- outerHTML: string;
56
- readonly ownerDocument: Document;
57
- readonly part: DOMTokenList;
58
- readonly prefix: string | null;
59
- readonly scrollHeight: number;
60
- scrollLeft: number;
61
- scrollTop: number;
62
- readonly scrollWidth: number;
63
- readonly shadowRoot: ShadowRoot | null;
64
- slot: string;
65
- readonly tagName: string;
66
- attachShadow(init: ShadowRootInit): ShadowRoot;
67
- closest<K_2 extends keyof HTMLElementTagNameMap>(selector: K_2): HTMLElementTagNameMap[K_2] | null;
68
- closest<K_3 extends keyof SVGElementTagNameMap>(selector: K_3): SVGElementTagNameMap[K_3] | null;
69
- closest<E extends Element = Element>(selectors: string): E | null;
70
- getAttribute(qualifiedName: string): string | null;
71
- getAttributeNS(namespace: string | null, localName: string): string | null;
72
- getAttributeNames(): string[];
73
- getAttributeNode(qualifiedName: string): Attr | null;
74
- getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;
75
- getBoundingClientRect(): DOMRect;
76
- getClientRects(): DOMRectList;
77
- getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
78
- getElementsByTagName<K_4 extends keyof HTMLElementTagNameMap>(qualifiedName: K_4): HTMLCollectionOf<HTMLElementTagNameMap[K_4]>;
79
- getElementsByTagName<K_5 extends keyof SVGElementTagNameMap>(qualifiedName: K_5): HTMLCollectionOf<SVGElementTagNameMap[K_5]>;
80
- getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
81
- getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
82
- getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
83
- getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
84
- hasAttribute(qualifiedName: string): boolean;
85
- hasAttributeNS(namespace: string | null, localName: string): boolean;
86
- hasAttributes(): boolean;
87
- hasPointerCapture(pointerId: number): boolean;
88
- insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
89
- insertAdjacentHTML(position: InsertPosition, text: string): void;
90
- insertAdjacentText(where: InsertPosition, data: string): void;
91
- matches(selectors: string): boolean;
92
- releasePointerCapture(pointerId: number): void;
93
- removeAttribute(qualifiedName: string): void;
94
- removeAttributeNS(namespace: string | null, localName: string): void;
95
- removeAttributeNode(attr: Attr): Attr;
96
- requestFullscreen(options?: FullscreenOptions | undefined): Promise<void>;
97
- requestPointerLock(): void;
98
- scroll(options?: ScrollToOptions | undefined): void;
99
- scroll(x: number, y: number): void;
100
- scrollBy(options?: ScrollToOptions | undefined): void;
101
- scrollBy(x: number, y: number): void;
102
- scrollIntoView(arg?: boolean | ScrollIntoViewOptions | undefined): void;
103
- scrollTo(options?: ScrollToOptions | undefined): void;
104
- scrollTo(x: number, y: number): void;
105
- setAttribute(qualifiedName: string, value: string): void;
106
- setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
107
- setAttributeNode(attr: Attr): Attr | null;
108
- setAttributeNodeNS(attr: Attr): Attr | null;
109
- setPointerCapture(pointerId: number): void;
110
- toggleAttribute(qualifiedName: string, force?: boolean | undefined): boolean;
111
- webkitMatchesSelector(selectors: string): boolean;
112
- readonly baseURI: string;
113
- readonly childNodes: NodeListOf<ChildNode>;
114
- readonly firstChild: ChildNode | null;
115
- readonly isConnected: boolean;
116
- readonly lastChild: ChildNode | null;
117
- readonly nextSibling: ChildNode | null;
118
- readonly nodeName: string;
119
- readonly nodeType: number;
120
- nodeValue: string | null;
121
- readonly parentElement: HTMLElement | null;
122
- readonly parentNode: ParentNode | null;
123
- readonly previousSibling: ChildNode | null;
124
- textContent: string | null;
125
- appendChild<T_1 extends Node>(node: T_1): T_1;
126
- cloneNode(deep?: boolean | undefined): Node;
127
- compareDocumentPosition(other: Node): number;
128
- contains(other: Node | null): boolean;
129
- getRootNode(options?: GetRootNodeOptions | undefined): Node;
130
- hasChildNodes(): boolean;
131
- insertBefore<T_2 extends Node>(node: T_2, child: Node | null): T_2;
132
- isDefaultNamespace(namespace: string | null): boolean;
133
- isEqualNode(otherNode: Node | null): boolean;
134
- isSameNode(otherNode: Node | null): boolean;
135
- lookupNamespaceURI(prefix: string | null): string | null;
136
- lookupPrefix(namespace: string | null): string | null;
137
- normalize(): void;
138
- removeChild<T_3 extends Node>(child: T_3): T_3;
139
- replaceChild<T_4 extends Node>(node: Node, child: T_4): T_4;
140
- readonly ATTRIBUTE_NODE: number;
141
- readonly CDATA_SECTION_NODE: number;
142
- readonly COMMENT_NODE: number;
143
- readonly DOCUMENT_FRAGMENT_NODE: number;
144
- readonly DOCUMENT_NODE: number;
145
- readonly DOCUMENT_POSITION_CONTAINED_BY: number;
146
- readonly DOCUMENT_POSITION_CONTAINS: number;
147
- readonly DOCUMENT_POSITION_DISCONNECTED: number;
148
- readonly DOCUMENT_POSITION_FOLLOWING: number;
149
- readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
150
- readonly DOCUMENT_POSITION_PRECEDING: number;
151
- readonly DOCUMENT_TYPE_NODE: number;
152
- readonly ELEMENT_NODE: number;
153
- readonly ENTITY_NODE: number;
154
- readonly ENTITY_REFERENCE_NODE: number;
155
- readonly NOTATION_NODE: number;
156
- readonly PROCESSING_INSTRUCTION_NODE: number;
157
- readonly TEXT_NODE: number;
158
- dispatchEvent(event: Event): boolean;
159
- ariaAtomic: string;
160
- ariaAutoComplete: string;
161
- ariaBusy: string;
162
- ariaChecked: string;
163
- ariaColCount: string;
164
- ariaColIndex: string;
165
- ariaColSpan: string;
166
- ariaCurrent: string;
167
- ariaDisabled: string;
168
- ariaExpanded: string;
169
- ariaHasPopup: string;
170
- ariaHidden: string;
171
- ariaKeyShortcuts: string;
172
- ariaLabel: string;
173
- ariaLevel: string;
174
- ariaLive: string;
175
- ariaModal: string;
176
- ariaMultiLine: string;
177
- ariaMultiSelectable: string;
178
- ariaOrientation: string;
179
- ariaPlaceholder: string;
180
- ariaPosInSet: string;
181
- ariaPressed: string;
182
- ariaReadOnly: string;
183
- ariaRequired: string;
184
- ariaRoleDescription: string;
185
- ariaRowCount: string;
186
- ariaRowIndex: string;
187
- ariaRowSpan: string;
188
- ariaSelected: string;
189
- ariaSetSize: string;
190
- ariaSort: string;
191
- ariaValueMax: string;
192
- ariaValueMin: string;
193
- ariaValueNow: string;
194
- ariaValueText: string;
195
- animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions | undefined): Animation;
196
- getAnimations(options?: GetAnimationsOptions | undefined): Animation[];
197
- after(...nodes: (string | Node)[]): void;
198
- before(...nodes: (string | Node)[]): void;
199
- remove(): void;
200
- replaceWith(...nodes: (string | Node)[]): void;
201
- innerHTML: string;
202
- readonly nextElementSibling: Element | null;
203
- readonly previousElementSibling: Element | null;
204
- readonly childElementCount: number;
205
- readonly children: HTMLCollection;
206
- readonly firstElementChild: Element | null;
207
- readonly lastElementChild: Element | null;
208
- append(...nodes: (string | Node)[]): void;
209
- prepend(...nodes: (string | Node)[]): void;
210
- querySelector<K_6 extends keyof HTMLElementTagNameMap>(selectors: K_6): HTMLElementTagNameMap[K_6] | null;
211
- querySelector<K_7 extends keyof SVGElementTagNameMap>(selectors: K_7): SVGElementTagNameMap[K_7] | null;
212
- querySelector<E_1 extends Element = Element>(selectors: string): E_1 | null;
213
- querySelectorAll<K_8 extends keyof HTMLElementTagNameMap>(selectors: K_8): NodeListOf<HTMLElementTagNameMap[K_8]>;
214
- querySelectorAll<K_9 extends keyof SVGElementTagNameMap>(selectors: K_9): NodeListOf<SVGElementTagNameMap[K_9]>;
215
- querySelectorAll<E_2 extends Element = Element>(selectors: string): NodeListOf<E_2>;
216
- replaceChildren(...nodes: (string | Node)[]): void;
217
- readonly assignedSlot: HTMLSlotElement | null;
218
- oncopy: ((this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any) | null;
219
- oncut: ((this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any) | null;
220
- onpaste: ((this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any) | null;
221
- readonly style: CSSStyleDeclaration;
222
- contentEditable: string;
223
- enterKeyHint: string;
224
- inputMode: string;
225
- readonly isContentEditable: boolean;
226
- onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
227
- onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
228
- onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
229
- onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
230
- onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
231
- onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
232
- onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
233
- oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
234
- oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;
235
- onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
236
- onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
237
- onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;
238
- oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
239
- oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
240
- ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
241
- ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
242
- ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
243
- ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
244
- ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
245
- ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
246
- ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
247
- ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
248
- ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
249
- onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;
250
- onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;
251
- onerror: OnErrorEventHandler;
252
- onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
253
- onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
254
- ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
255
- oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
256
- oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
257
- onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
258
- onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
259
- onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
260
- onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;
261
- onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
262
- onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
263
- onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
264
- onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
265
- onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
266
- onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
267
- onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
268
- onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
269
- onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
270
- onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
271
- onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
272
- onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;
273
- onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
274
- onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;
275
- onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
276
- onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
277
- onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
278
- onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
279
- onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
280
- onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
281
- onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
282
- onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
283
- onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null;
284
- onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
285
- onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;
286
- onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
287
- onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
288
- onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;
289
- onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;
290
- onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;
291
- onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
292
- onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
293
- onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;
294
- onsubmit: ((this: GlobalEventHandlers, ev: Event) => any) | null;
295
- onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
296
- ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
297
- ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;
298
- ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
299
- ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
300
- ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
301
- ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
302
- ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
303
- ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
304
- ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
305
- ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
306
- onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
307
- onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
308
- onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
309
- onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
310
- onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
311
- onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
312
- onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
313
- readonly dataset: DOMStringMap;
314
- nonce?: string | undefined;
315
- tabIndex: number;
316
- blur(): void;
317
- focus(options?: FocusOptions | undefined): void;
318
- };
319
- } & T;
@@ -1,46 +0,0 @@
1
- import { Injector } from '@joist/di';
2
- import { getEnvironmentRef } from './environment';
3
- export const ROOT_ATTR = '__joist__injector__root__';
4
- /**
5
- * Takes an InjectionToken and resolves that token to a service
6
- */
7
- export function get(token) {
8
- return function (target, key) {
9
- Object.defineProperty(target, key, {
10
- get() {
11
- return this.injector.get(token);
12
- },
13
- });
14
- };
15
- }
16
- /**
17
- * Mixin that applies an injector to a base class
18
- */
19
- export function JoistDi(Base, config = { providers: [] }) {
20
- return class Injected extends Base {
21
- constructor(..._) {
22
- super();
23
- this.injector = new Injector({ providers: config.providers }, getEnvironmentRef());
24
- this.setAttribute(ROOT_ATTR, 'true');
25
- }
26
- connectedCallback() {
27
- if (!!super.connectedCallback) {
28
- super.connectedCallback();
29
- }
30
- let parent;
31
- if (this.parentElement) {
32
- parent = this.parentElement.closest(`[${ROOT_ATTR}]`);
33
- }
34
- if (parent && parent.injector) {
35
- this.injector.parent = parent.injector;
36
- }
37
- }
38
- disconnectedCallback() {
39
- if (!!super.disconnectedCallback) {
40
- super.disconnectedCallback();
41
- }
42
- this.injector.parent = undefined;
43
- }
44
- };
45
- }
46
- //# sourceMappingURL=injector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../dom/lib/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAY,MAAM,WAAW,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAMrD;;GAEG;AACH,MAAM,UAAU,GAAG,CAAI,KAAuB;IAC5C,OAAO,UAAU,MAAoB,EAAE,GAAW;QAChD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;YACjC,GAAG;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,IAAO,EACP,SAAwB,EAAE,SAAS,EAAE,EAAE,EAAE;IAEzC,OAAO,MAAM,QAAS,SAAQ,IAAI;QAGhC,YAAY,GAAG,CAAQ;YACrB,KAAK,EAAE,CAAC;YAHH,aAAQ,GAAa,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAK7F,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,iBAAiB;YACf,IAAI,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE;gBAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;aAC3B;YAED,IAAI,MAAuD,CAAC;YAE5D,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG,CAGvC,CAAC;aACf;YAED,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;gBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;aACxC;QACH,CAAC;QAED,oBAAoB;YAClB,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;aAC9B;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './lib/environment';
2
- export * from './lib/injector';
package/target/dom/lib.js DELETED
@@ -1,3 +0,0 @@
1
- export * from './lib/environment';
2
- export * from './lib/injector';
3
- //# sourceMappingURL=lib.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../dom/lib.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Provider, ProviderToken } from '@joist/di';
2
- import { InjectorBase } from '@joist/di/dom';
3
- declare type TestBedBase = HTMLElement & InjectorBase;
4
- declare class TestBed {
5
- private host;
6
- constructor(host: TestBedBase);
7
- create<T extends HTMLElement>(CEC: new (...args: any[]) => T): T;
8
- get<T>(token: ProviderToken<T>): T;
9
- clean(): void;
10
- }
11
- export declare function defineTestBed(providers?: Provider<any>[]): TestBed;
12
- export {};
@@ -1,30 +0,0 @@
1
- import { JoistDi } from '@joist/di/dom';
2
- class TestBed {
3
- constructor(host) {
4
- this.host = host;
5
- document.body.appendChild(this.host);
6
- }
7
- create(CEC) {
8
- return this.host.appendChild(new CEC());
9
- }
10
- get(token) {
11
- return this.host.injector.get(token);
12
- }
13
- clean() {
14
- document.removeChild(this.host);
15
- document.body.appendChild(this.host);
16
- }
17
- }
18
- class Host extends JoistDi(HTMLElement) {
19
- constructor() {
20
- super();
21
- this.injector.parent = undefined;
22
- }
23
- }
24
- customElements.define('joist-test-bed', Host);
25
- export function defineTestBed(providers = []) {
26
- const host = new Host();
27
- host.injector.options = { providers };
28
- return new TestBed(host);
29
- }
30
- //# sourceMappingURL=lib.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../dom_testing/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAItD,MAAM,OAAO;IACX,YAAoB,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QACnC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAwB,GAA8B;QAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAI,KAAuB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK;QACH,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AAED,MAAM,IAAK,SAAQ,OAAO,CAAC,WAAW,CAAC;IACrC;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;IACnC,CAAC;CACF;AAED,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE9C,MAAM,UAAU,aAAa,CAAC,YAA6B,EAAE;IAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAExB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,CAAC;IAEtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -1,4 +0,0 @@
1
- import { ProviderToken } from './provider';
2
- export declare const PROVIDER_DEPS_KEY = "deps";
3
- export declare function getProviderDeps(provider: ProviderToken<any>): ProviderToken<any>[];
4
- export declare function inject(injectable: ProviderToken<any>): (target: any, _: string, index: number) => void;
@@ -1,11 +0,0 @@
1
- export const PROVIDER_DEPS_KEY = 'deps';
2
- export function getProviderDeps(provider) {
3
- return provider[PROVIDER_DEPS_KEY] || provider.prototype[PROVIDER_DEPS_KEY] || [];
4
- }
5
- export function inject(injectable) {
6
- return function (target, _, index) {
7
- target[PROVIDER_DEPS_KEY] = target[PROVIDER_DEPS_KEY] || [];
8
- target[PROVIDER_DEPS_KEY][index] = injectable;
9
- };
10
- }
11
- //# sourceMappingURL=inject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../lib/inject.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,MAAM,UAAU,eAAe,CAAC,QAA4B;IAC1D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,UAA8B;IACnD,OAAO,UAAU,MAAW,EAAE,CAAS,EAAE,KAAa;QACpD,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"injector.js","sourceRoot":"","sources":["../../lib/injector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAO7C;;;;;;GAMG;AACH,MAAM,OAAO,QAAQ;IAGnB,YAAmB,UAA2B,EAAE,EAAS,MAAiB;QAAvD,YAAO,GAAP,OAAO,CAAsB;QAAS,WAAM,GAAN,MAAM,CAAW;QAFlE,gBAAW,GAAG,IAAI,OAAO,EAA2B,CAAC;QAG3D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;SAClE;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAAyB;QAC3B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,GAAG,CAAI,KAAuB;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,IAAI,QAAQ,GAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAI,CAAwB;QAChC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAEO,OAAO,CAAI,KAAuB;QACxC,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,QAAQ,EAAE;YACZ,kEAAkE;YAClE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YACtE,qFAAqF;YACrF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,kDAAkD;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAA8B,CAAC,CAAC;IACrD,CAAC;IAEO,YAAY,CAAC,KAAyB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;IAC/E,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- import { ProviderToken } from './provider';
2
- export declare function isProvidedInRoot(provider: ProviderToken<any>): any;
3
- export declare function service(): (provider: ProviderToken<any>) => void;
@@ -1,9 +0,0 @@
1
- export function isProvidedInRoot(provider) {
2
- return provider.provideInRoot || false;
3
- }
4
- export function service() {
5
- return function (provider) {
6
- Object.defineProperty(provider, 'provideInRoot', { value: true });
7
- };
8
- }
9
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../lib/service.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,OAAO,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,UAAU,QAA4B;QAC3C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC"}
package/target/lib.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './lib/injector';
2
- export * from './lib/provider';
3
- export * from './lib/inject';
4
- export * from './lib/service';
package/target/lib.js DELETED
@@ -1,5 +0,0 @@
1
- export * from './lib/injector';
2
- export * from './lib/provider';
3
- export * from './lib/inject';
4
- export * from './lib/service';
5
- //# sourceMappingURL=lib.js.map
package/target/lib.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}