@wirestate/lit 0.6.1 → 0.7.0-experimental.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 (107) hide show
  1. package/CHANGELOG.md +17 -2
  2. package/README.md +88 -70
  3. package/cjs/development/index.js +412 -320
  4. package/cjs/development/index.js.map +1 -1
  5. package/cjs/production/index.js +1 -1
  6. package/cjs/production/index.js.map +1 -1
  7. package/esm/development/commands/on-command-controller.js +8 -7
  8. package/esm/development/commands/on-command-controller.js.map +1 -1
  9. package/esm/development/commands/on-command.js +7 -6
  10. package/esm/development/commands/on-command.js.map +1 -1
  11. package/esm/development/commands/use-on-command.js +7 -7
  12. package/esm/development/consumption/injection.js +8 -8
  13. package/esm/development/consumption/injection.js.map +1 -1
  14. package/esm/development/consumption/use-container.js +40 -0
  15. package/esm/development/consumption/use-container.js.map +1 -0
  16. package/esm/development/consumption/use-injection.js +8 -8
  17. package/esm/development/consumption/use-injection.js.map +1 -1
  18. package/esm/development/consumption/use-scope.js +44 -0
  19. package/esm/development/consumption/use-scope.js.map +1 -0
  20. package/esm/development/context/container-context.js +17 -0
  21. package/esm/development/context/container-context.js.map +1 -0
  22. package/esm/development/events/on-event-controller.js +11 -9
  23. package/esm/development/events/on-event-controller.js.map +1 -1
  24. package/esm/development/events/on-event.js +11 -8
  25. package/esm/development/events/on-event.js.map +1 -1
  26. package/esm/development/events/use-on-events.js +8 -8
  27. package/esm/development/index.js +9 -7
  28. package/esm/development/index.js.map +1 -1
  29. package/esm/development/provision/container-provide.js +68 -0
  30. package/esm/development/provision/container-provide.js.map +1 -0
  31. package/esm/development/provision/container-provider.js +74 -0
  32. package/esm/development/provision/container-provider.js.map +1 -0
  33. package/esm/development/provision/sub-container-provide.js +56 -0
  34. package/esm/development/provision/sub-container-provide.js.map +1 -0
  35. package/esm/development/provision/sub-container-provider.js +93 -0
  36. package/esm/development/provision/sub-container-provider.js.map +1 -0
  37. package/esm/development/provision/use-container-provision.js +44 -0
  38. package/esm/development/provision/use-container-provision.js.map +1 -0
  39. package/esm/development/provision/use-sub-container-provider.js +34 -0
  40. package/esm/development/provision/use-sub-container-provider.js.map +1 -0
  41. package/esm/development/queries/on-query-controller.js +9 -8
  42. package/esm/development/queries/on-query-controller.js.map +1 -1
  43. package/esm/development/queries/on-query.js +7 -6
  44. package/esm/development/queries/on-query.js.map +1 -1
  45. package/esm/development/queries/use-on-query.js +7 -7
  46. package/esm/production/commands/on-command-controller.js +1 -1
  47. package/esm/production/commands/on-command-controller.js.map +1 -1
  48. package/esm/production/commands/on-command.js.map +1 -1
  49. package/esm/production/consumption/injection.js +1 -1
  50. package/esm/production/consumption/injection.js.map +1 -1
  51. package/esm/production/consumption/use-container.js +1 -0
  52. package/esm/production/consumption/use-container.js.map +1 -0
  53. package/esm/production/consumption/use-injection.js +1 -1
  54. package/esm/production/consumption/use-injection.js.map +1 -1
  55. package/esm/production/consumption/use-scope.js +1 -0
  56. package/esm/production/consumption/use-scope.js.map +1 -0
  57. package/esm/production/context/container-context.js +1 -0
  58. package/esm/production/context/container-context.js.map +1 -0
  59. package/esm/production/events/on-event-controller.js +1 -1
  60. package/esm/production/events/on-event-controller.js.map +1 -1
  61. package/esm/production/events/on-event.js.map +1 -1
  62. package/esm/production/index.js +1 -1
  63. package/esm/production/provision/container-provide.js +1 -0
  64. package/esm/production/provision/container-provide.js.map +1 -0
  65. package/esm/production/provision/container-provider.js +1 -0
  66. package/esm/production/provision/container-provider.js.map +1 -0
  67. package/esm/production/provision/sub-container-provide.js +1 -0
  68. package/esm/production/provision/sub-container-provide.js.map +1 -0
  69. package/esm/production/provision/sub-container-provider.js +1 -0
  70. package/esm/production/provision/sub-container-provider.js.map +1 -0
  71. package/esm/production/provision/use-container-provision.js +1 -0
  72. package/esm/production/provision/use-container-provision.js.map +1 -0
  73. package/esm/production/provision/use-sub-container-provider.js +1 -0
  74. package/esm/production/provision/use-sub-container-provider.js.map +1 -0
  75. package/esm/production/queries/on-query-controller.js +1 -1
  76. package/esm/production/queries/on-query-controller.js.map +1 -1
  77. package/esm/production/queries/on-query.js.map +1 -1
  78. package/index.d.ts +413 -291
  79. package/package.json +2 -2
  80. package/esm/development/context/ioc-context.js +0 -17
  81. package/esm/development/context/ioc-context.js.map +0 -1
  82. package/esm/development/provision/injectables-provide.js +0 -47
  83. package/esm/development/provision/injectables-provide.js.map +0 -1
  84. package/esm/development/provision/injectables-provider-controller.js +0 -123
  85. package/esm/development/provision/injectables-provider-controller.js.map +0 -1
  86. package/esm/development/provision/ioc-provide.js +0 -55
  87. package/esm/development/provision/ioc-provide.js.map +0 -1
  88. package/esm/development/provision/ioc-provider-controller.js +0 -72
  89. package/esm/development/provision/ioc-provider-controller.js.map +0 -1
  90. package/esm/development/provision/use-injectables-provider.js +0 -33
  91. package/esm/development/provision/use-injectables-provider.js.map +0 -1
  92. package/esm/development/provision/use-ioc-provision.js +0 -29
  93. package/esm/development/provision/use-ioc-provision.js.map +0 -1
  94. package/esm/production/context/ioc-context.js +0 -1
  95. package/esm/production/context/ioc-context.js.map +0 -1
  96. package/esm/production/provision/injectables-provide.js +0 -1
  97. package/esm/production/provision/injectables-provide.js.map +0 -1
  98. package/esm/production/provision/injectables-provider-controller.js +0 -1
  99. package/esm/production/provision/injectables-provider-controller.js.map +0 -1
  100. package/esm/production/provision/ioc-provide.js +0 -1
  101. package/esm/production/provision/ioc-provide.js.map +0 -1
  102. package/esm/production/provision/ioc-provider-controller.js +0 -1
  103. package/esm/production/provision/ioc-provider-controller.js.map +0 -1
  104. package/esm/production/provision/use-injectables-provider.js +0 -1
  105. package/esm/production/provision/use-injectables-provider.js.map +0 -1
  106. package/esm/production/provision/use-ioc-provision.js +0 -1
  107. package/esm/production/provision/use-ioc-provision.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ## 0.7.0
1
+ ## Unreleased
2
2
 
3
3
  - Add `useScope` in `@wirestate/react`
4
4
  - New lit elements modules - `@wirestate/lit` and `@wirestate/lit-signals`
@@ -8,6 +8,21 @@
8
8
  - `WireScope`: add new event/command/query subscribe-unsubscribe methods
9
9
  - Export more alias / methods from `@wirestate/core`
10
10
  - Export more alias / methods from `@wirestate/react-mobx`
11
+ - Export missing methods typing for `@wirestate/core`
12
+ - Extensive JSDoc coverage for wirestate packages
13
+ - `createIocContainer`: Removed in favor of `createContainer`
14
+ - `createContainer`: Added ability to instantly provide and activate entries, targeted seeds
15
+ - `createInjectablesProvider`: Removed.
16
+ - `IocProvider`: Removed
17
+ - `useRootContainer`: Added separate hook for store management in React tree
18
+ - `ContainerProvider`: Simpler provider for containers.
19
+ - `SubContainerProvider`: Added component solving problems of removed `createInjectablesProvider`
20
+ - `ContainerActivator`: Added separate activation component
21
+ - Replace IoC-context provision APIs with `ContainerContext`, `containerProvide`, `ContainerProvider`, and `useContainerProvision`
22
+ - Replace injectables-provider APIs with `subContainerProvide`, `SubContainerProvider`, and `useSubContainerProvider`
23
+ - Provide plain `Container` values through Lit context instead of wrapper objects
24
+ - Recreate managed child containers when the parent container context changes
25
+ - Add `useContainer` and `useScope` consumers in `@wirestate/lit`
11
26
 
12
27
  ## 0.6.3
13
28
 
@@ -70,6 +85,6 @@
70
85
  - useService -> useInjection
71
86
  - AbstractService::getService -> AbstractService::resolve
72
87
 
73
- ## 0.1.1
88
+ ## 0.1.0
74
89
 
75
90
  - Initial release
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # @wirestate/lit
1
+ # @wirestate/lit [[monorepo](https://github.com/Neloreck/wirestate)] [[docs](https://neloreck.github.io/wirestate/)]
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/@wirestate/lit.svg?style=flat-square)](https://www.npmjs.com/package/@wirestate/lit)
4
4
  [![license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/Neloreck/wirestate/blob/master/LICENSE)
5
5
 
6
- Lit elements integration for wirestate. Provides dependency injection and messaging for Lit components.
6
+ Lit elements integration for wirestate. Provides container provisioning, dependency injection, and messaging for Lit components.
7
7
 
8
8
  ## Installation
9
9
 
@@ -18,25 +18,31 @@ npm install @wirestate/core @wirestate/lit lit reflect-metadata
18
18
  - **Events**: Subscribe to events from the global event bus using `@onEvent` or `useOnEvents`.
19
19
  - **Commands**: Register command handlers using `@onCommand` or `useOnCommand`.
20
20
  - **Queries**: Register query handlers using `@onQuery` or `useOnQuery`.
21
- - **Container Provisioning**: Provide and manage IoC containers within the Lit component tree using `@iocProvide` or `useIocProvision`.
22
- - **Service Binding**: Dynamically bind services to the container using `@injectablesProvide`, `useInjectablesProvider`, or `InjectablesProviderController`.
21
+ - **Container Provisioning**: Provide and manage containers within the Lit component tree using `@containerProvide` or `useContainerProvision`.
22
+ - **Sub-containers**: Create managed child containers derived from the parent context using `@subContainerProvide`, `useSubContainerProvider`, or `SubContainerProvider`.
23
23
  - **Test Utilities**: Simplified setup for unit testing components with IoC dependencies.
24
24
 
25
25
  ## Provisioning
26
26
 
27
- ### `@iocProvide(options?)` / `useIocProvision(host, options?)`
27
+ ### `@containerProvide(options)` / `useContainerProvision(host, options)`
28
28
 
29
- Provides an IoC container to the component tree. It uses Lit Context to propagate the container to child elements.
29
+ Provides a container to the component tree. It uses Lit Context to propagate the container to child elements.
30
+
31
+ Pass `container` to expose an existing container, or pass `options` to create and manage one for the host lifecycle.
30
32
 
31
33
  ```typescript
32
- import { LitElement, html } from 'lit';
33
- import { customElement } from 'lit/decorators.js';
34
- import { iocProvide, IocProviderController } from '@wirestate/lit';
34
+ import { LitElement, html } from "lit";
35
+ import { customElement } from "lit/decorators.js";
36
+ import { containerProvide, ContainerProvider } from "@wirestate/lit";
35
37
 
36
- @customElement('my-app')
38
+ @customElement("my-app")
37
39
  class MyApp extends LitElement {
38
- @iocProvide()
39
- private ioc!: IocProviderController;
40
+ @containerProvide({
41
+ options: {
42
+ seed: { someData: "value" },
43
+ },
44
+ })
45
+ private containerProvider!: ContainerProvider;
40
46
 
41
47
  render() {
42
48
  return html`<my-component></my-component>`;
@@ -44,69 +50,81 @@ class MyApp extends LitElement {
44
50
  }
45
51
  ```
46
52
 
47
- ### `@injectablesProvide(options)` / `useInjectablesProvider(host, options)`
53
+ ### `@subContainerProvide(options)` / `useSubContainerProvider(host, options)`
48
54
 
49
- Binds a set of injectables to the nearest IoC container for the host element's lifetime. Entries are bound when the host connects and unbound when it disconnects.
55
+ Creates a managed child container derived from the nearest parent container for the host element's lifetime. The child container is recreated when the parent container changes and destroyed when the host disconnects.
50
56
 
51
57
  Using the decorator (accessor):
52
58
 
53
59
  ```typescript
54
- import { LitElement } from 'lit';
55
- import { customElement } from 'lit/decorators.js';
56
- import { injectablesProvide, InjectablesProviderController } from '@wirestate/lit';
60
+ import { LitElement } from "lit";
61
+ import { customElement } from "lit/decorators.js";
62
+ import { subContainerProvide, SubContainerProvider } from "@wirestate/lit";
57
63
 
58
- import { AuthService, UserService } from './services';
64
+ import { AuthService, UserService } from "./services";
59
65
 
60
- @customElement('my-app')
66
+ @customElement("my-app")
61
67
  class MyApp extends LitElement {
62
- @injectablesProvide({ entries: [AuthService, UserService], activate: [AuthService] })
63
- public services!: InjectablesProviderController<MyApp>;
68
+ @subContainerProvide({
69
+ options: {
70
+ entries: [AuthService, UserService],
71
+ activate: [AuthService],
72
+ },
73
+ })
74
+ public containerProvider!: SubContainerProvider;
64
75
  }
65
76
  ```
66
77
 
67
78
  Using the hook:
68
79
 
69
80
  ```typescript
70
- import { LitElement } from 'lit';
71
- import { useInjectablesProvider } from '@wirestate/lit';
81
+ import { LitElement } from "lit";
82
+ import { useSubContainerProvider } from "@wirestate/lit";
72
83
 
73
- import { AuthService, UserService } from './services';
84
+ import { AuthService, UserService } from "./services";
74
85
 
75
86
  class MyApp extends LitElement {
76
- private services = useInjectablesProvider(this, {
77
- entries: [AuthService, UserService],
78
- activate: [AuthService],
87
+ private container = useSubContainerProvider(this, {
88
+ options: {
89
+ entries: [AuthService, UserService],
90
+ activate: [AuthService],
91
+ },
79
92
  });
80
93
  }
81
94
  ```
82
95
 
83
- Using the controller directly:
96
+ Using the provider directly:
84
97
 
85
98
  ```typescript
86
- import { LitElement } from 'lit';
87
- import { InjectablesProviderController } from '@wirestate/lit';
99
+ import { LitElement } from "lit";
100
+ import { SubContainerProvider } from "@wirestate/lit";
88
101
 
89
- import { AuthService, UserService } from './services';
102
+ import { AuthService, UserService } from "./services";
90
103
 
91
104
  class MyApp extends LitElement {
92
- private services = new InjectablesProviderController(this, {
93
- entries: [AuthService, UserService],
94
- activate: [AuthService],
105
+ private containerProvider: SubContainerProvider = new SubContainerProvider(this, {
106
+ options: {
107
+ entries: [AuthService, UserService],
108
+ activate: [AuthService],
109
+ },
95
110
  });
96
111
  }
97
112
  ```
98
113
 
99
- To bind into a specific container instead of the nearest provider context, pass the `into` option:
114
+ To seed the child container during creation, pass `seeds` inside `options`:
100
115
 
101
116
  ```typescript
102
- import { LitElement } from 'lit';
103
- import { useInjectablesProvider } from '@wirestate/lit';
117
+ import { LitElement } from "lit";
118
+ import { useSubContainerProvider } from "@wirestate/lit";
104
119
 
105
- import { AuthService, UserService } from './services';
120
+ import { AuthService, UserService } from "./services";
106
121
 
107
122
  class MyApp extends LitElement {
108
- private services = useInjectablesProvider(this, {
109
- entries: [AuthService, UserService],
123
+ private provider: SubContainerProvider = useSubContainerProvider(this, {
124
+ options: {
125
+ entries: [AuthService, UserService],
126
+ seeds: [[AuthService, { role: "admin" }]],
127
+ },
110
128
  });
111
129
  }
112
130
  ```
@@ -115,16 +133,16 @@ class MyApp extends LitElement {
115
133
 
116
134
  ### `@injection(optionsOrId)` / `useInjection(host, optionsOrId)`
117
135
 
118
- Injects a service from the nearest IoC container. Supports both options object and direct service identifier.
136
+ Injects a service from the nearest parent container. Supports both options object and direct service identifier.
119
137
 
120
138
  ```typescript
121
- import { LitElement, html } from 'lit';
122
- import { customElement } from 'lit/decorators.js';
123
- import { injection } from '@wirestate/lit';
139
+ import { LitElement, html } from "lit";
140
+ import { customElement } from "lit/decorators.js";
141
+ import { injection } from "@wirestate/lit";
124
142
 
125
- import { MyService } from './services';
143
+ import { MyService } from "./services";
126
144
 
127
- @customElement('my-component')
145
+ @customElement("my-component")
128
146
  class MyComponent extends LitElement {
129
147
  // Using identifier:
130
148
  @injection(MyService)
@@ -140,13 +158,13 @@ class MyComponent extends LitElement {
140
158
  }
141
159
  ```
142
160
 
143
- Using the controller:
161
+ Using the hook:
144
162
 
145
163
  ```typescript
146
- import { LitElement, html } from 'lit';
147
- import { useInjection } from '@wirestate/lit';
164
+ import { LitElement, html } from "lit";
165
+ import { useInjection } from "@wirestate/lit";
148
166
 
149
- import { MyService } from './services';
167
+ import { MyService } from "./services";
150
168
 
151
169
  class MyComponent extends LitElement {
152
170
  // Using identifier:
@@ -165,18 +183,18 @@ class MyComponent extends LitElement {
165
183
 
166
184
  ### Events
167
185
 
168
- Subscribe to events from the event bus using `@onEvent` decorator or `useOnEvents` controller.
186
+ Subscribe to events from the event bus using `@onEvent` decorator or `useOnEvents` controller. Handlers follow the active container context when the nearest container changes.
169
187
 
170
188
  ```typescript
171
- import { LitElement } from 'lit';
172
- import { onEvent } from '@wirestate/lit';
189
+ import { LitElement } from "lit";
190
+ import { onEvent } from "@wirestate/lit";
173
191
 
174
- import { UserLoggedInEvent } from './events';
192
+ import { UserLoggedInEvent } from "./events";
175
193
 
176
194
  class MyListener extends LitElement {
177
195
  @onEvent("USER_LOGGED_IN")
178
196
  private handleLogin(event: UserLoggedInEvent) {
179
- console.log('User logged in:', event.payload);
197
+ console.log("User logged in:", event.payload);
180
198
  }
181
199
  }
182
200
  ```
@@ -184,26 +202,26 @@ class MyListener extends LitElement {
184
202
  Using the controller:
185
203
 
186
204
  ```typescript
187
- import { LitElement } from 'lit';
188
- import { useOnEvents } from '@wirestate/lit';
205
+ import { LitElement } from "lit";
206
+ import { useOnEvents } from "@wirestate/lit";
189
207
 
190
208
  class MyListener extends LitElement {
191
209
  private events = useOnEvents(this, {
192
- handler: (event) => console.log('Event received:', event),
210
+ handler: (event) => console.log("Event received:", event),
193
211
  });
194
212
  }
195
213
  ```
196
214
 
197
215
  ### Commands
198
216
 
199
- Register a handler for a specific command type.
217
+ Register a handler for a specific command type. Handlers follow the active container context when the nearest container changes.
200
218
 
201
219
  ```typescript
202
- import { LitElement } from 'lit';
203
- import { onCommand } from '@wirestate/lit';
220
+ import { LitElement } from "lit";
221
+ import { onCommand } from "@wirestate/lit";
204
222
 
205
223
  class MyCommander extends LitElement {
206
- @onCommand('RESET_STATE')
224
+ @onCommand("RESET_STATE")
207
225
  private handleReset() {
208
226
  // perform reset
209
227
  }
@@ -212,14 +230,14 @@ class MyCommander extends LitElement {
212
230
 
213
231
  ### Queries
214
232
 
215
- Register a handler for a specific query type.
233
+ Register a handler for a specific query type. Handlers follow the active container context when the nearest container changes.
216
234
 
217
235
  ```typescript
218
- import { LitElement } from 'lit';
219
- import { onQuery } from '@wirestate/lit';
236
+ import { LitElement } from "lit";
237
+ import { onQuery } from "@wirestate/lit";
220
238
 
221
239
  class MyQuerier extends LitElement {
222
- @onQuery('GET_VIEW_PORT')
240
+ @onQuery("GET_VIEW_PORT")
223
241
  private handleGetViewport() {
224
242
  return { width: window.innerWidth, height: window.innerHeight };
225
243
  }
@@ -233,9 +251,9 @@ class MyQuerier extends LitElement {
233
251
  Creates a test fixture with a provider element and an IoC container. Useful for unit testing components that use injections.
234
252
 
235
253
  ```typescript
236
- import { createLitProvision } from '@wirestate/lit/test-utils';
254
+ import { createLitProvision } from "@wirestate/lit/test-utils";
237
255
 
238
- describe('MyComponent', () => {
256
+ describe("MyComponent", () => {
239
257
  let fixture: ReturnType<typeof createLitProvision>;
240
258
 
241
259
  beforeEach(() => {
@@ -246,8 +264,8 @@ describe('MyComponent', () => {
246
264
  fixture.cleanup();
247
265
  });
248
266
 
249
- it('should work', () => {
250
- const el = document.createElement('my-component');
267
+ it("should work", () => {
268
+ const el = document.createElement("my-component");
251
269
  fixture.provider.appendChild(el);
252
270
  // ...
253
271
  });