@chidchanun/bcp 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,16 +1,17 @@
1
1
  # BCP Framework
2
2
 
3
- BCP Framework is a React full-stack application framework for file-based routing, SSR, server data, APIs, authentication, SQL databases, jobs, workflows, transactional events, realtime, caching, observability, plugins, deployment lifecycle and standalone Node.js production builds.
3
+ BCP Framework is a React full-stack application framework for file-based routing, SSR, server data, APIs, authentication, SQL databases, jobs, workflows, transactional events, realtime, caching, observability, plugins, dependency injection, deployment lifecycle and standalone Node.js production builds.
4
4
 
5
- > **Development target:** `0.3.0BCP Application Platform`
5
+ > **Development target:** `0.3.1Dependency Injection & Service Container`
6
6
  >
7
- > `0.3.0` remains unreleased until local validation, RC checks, tagging and npm publication complete.
7
+ > `0.3.1` remains unreleased until local validation, RC checks, tagging and npm publication complete.
8
8
 
9
9
  ## Current platform
10
10
 
11
11
  | Area | Capability |
12
12
  | --- | --- |
13
- | Application runtime | `defineApp()` / `createApp()`, typed config, shared services, plugins/modules, resource lifecycle, readiness and diagnostics |
13
+ | Application runtime | `defineApp()` / `createApp()`, typed config, DI, plugins/modules, resource lifecycle, readiness and diagnostics |
14
+ | Dependency injection | Typed tokens, value/factory/class providers, singleton/scoped/transient lifetimes, child scopes and test overrides |
14
15
  | Routing | Static, dynamic, catch-all, optional catch-all and route groups |
15
16
  | Rendering | React SSR, hydration, layouts, metadata and SPA navigation |
16
17
  | Server data | Route loaders, guards, actions and request-scoped server APIs |
@@ -21,7 +22,7 @@ BCP Framework is a React full-stack application framework for file-based routing
21
22
  | Workflows | Sequential/parallel steps, retries, persisted delays, compensation and run leases |
22
23
  | Events | Transactional outbox, SQL persistence, dispatcher leases and durable handoff |
23
24
  | Realtime | Channels, presence, broker delivery, WebSocket adapter contract, SSE and heartbeat |
24
- | Plugins | Dependency ordering, lifecycle, config parsing, services and async hooks |
25
+ | Plugins | Dependency ordering, lifecycle, config parsing, legacy shared services and async hooks |
25
26
  | Cache | Redis-compatible adapters/locks, stampede protection, TTL/tag/path invalidation and metrics |
26
27
  | Observability | Prometheus metrics, health/readiness, distributed tracing, W3C context and correlation IDs |
27
28
  | Deployment | Resource lifecycle, readiness, diagnostics, runtime identity and graceful shutdown |
@@ -61,85 +62,158 @@ Generated projects normally use one framework dependency:
61
62
  }
62
63
  ```
63
64
 
64
- ## BCP Application Platform — 0.3.0
65
+ ## Dependency Injection & Service Container — 0.3.1
65
66
 
66
- `0.3.0` adds the server-only `bcp/application` composition root.
67
+ `0.3.1` adds the server-only `bcp/container` entrypoint.
68
+
69
+ ```ts
70
+ import {
71
+ createServiceContainer,
72
+ createServiceToken,
73
+ provideFactory,
74
+ provideValue,
75
+ } from "bcp/container";
76
+
77
+ const configToken =
78
+ createServiceToken<{
79
+ apiUrl: string;
80
+ }>("config");
81
+
82
+ const clientToken =
83
+ createServiceToken<{
84
+ apiUrl: string;
85
+ }>("api-client");
86
+
87
+ const container =
88
+ createServiceContainer({
89
+ providers: [
90
+ provideValue(
91
+ configToken,
92
+ {
93
+ apiUrl: "https://api.example.com",
94
+ }
95
+ ),
96
+ provideFactory(
97
+ clientToken,
98
+ [
99
+ configToken,
100
+ ] as const,
101
+ (_context, [config]) => ({
102
+ apiUrl: config.apiUrl,
103
+ })
104
+ ),
105
+ ],
106
+ });
107
+
108
+ const client =
109
+ await container.resolve(
110
+ clientToken
111
+ );
112
+ ```
113
+
114
+ Supported lifetimes:
115
+
116
+ ```text
117
+ singleton one shared instance
118
+ scoped one instance per child/request scope
119
+ transient a new instance for every resolve
120
+ ```
121
+
122
+ Testing/request overrides use child scopes:
123
+
124
+ ```ts
125
+ const testScope =
126
+ container.createScope({
127
+ name: "test",
128
+ overrides: [
129
+ provideValue(
130
+ configToken,
131
+ fakeConfig
132
+ ),
133
+ ],
134
+ });
135
+ ```
136
+
137
+ Resolved disposable services are cleaned up in reverse creation order. Circular dependency graphs fail with `ServiceResolutionError` instead of returning partial objects.
138
+
139
+ Read more: [Dependency Injection & Service Container](docs/service-container.md).
140
+
141
+ ## BCP Application Platform — 0.3.x
142
+
143
+ `bcp/application` is the server-side composition root.
67
144
 
68
145
  ```ts
69
146
  import {
70
147
  createApp,
71
148
  } from "bcp/application";
149
+ import {
150
+ createServiceToken,
151
+ provideValue,
152
+ } from "bcp/container";
153
+
154
+ const configToken =
155
+ createServiceToken<{
156
+ region: string;
157
+ }>("config");
72
158
 
73
159
  export const app =
74
160
  createApp({
75
161
  name: "orders-api",
76
162
  version: "1.0.0",
163
+ providers: [
164
+ provideValue(
165
+ configToken,
166
+ {
167
+ region: "ap-southeast-1",
168
+ }
169
+ ),
170
+ ],
171
+ async setup(context) {
172
+ const config =
173
+ await context.container.resolve(
174
+ configToken
175
+ );
176
+ },
77
177
  });
78
178
  ```
79
179
 
80
- The runtime exposes one shared application context:
180
+ The application exposes:
81
181
 
82
182
  ```text
83
183
  app.config
184
+ app.container
84
185
  app.services
85
186
  app.hooks
86
187
  app.plugins
87
188
  app.deployment
88
189
  ```
89
190
 
90
- Existing BCP subsystem APIs remain independent. Application Platform coordinates them; it does not replace them.
191
+ `app.services` remains the Plugin Platform compatibility registry. New typed dependencies should prefer `app.container`.
91
192
 
92
- ### Shared services
193
+ Applications can register DI providers before start:
93
194
 
94
195
  ```ts
95
- app.provide(
96
- "database",
97
- database
98
- );
99
-
100
- app.provide(
101
- "cache",
102
- cache
103
- );
196
+ app.register(provider);
104
197
  ```
105
198
 
106
- Existing plugins/modules use the same service registry:
199
+ and create request/job/test scopes:
107
200
 
108
201
  ```ts
109
- const app =
110
- createApp({
111
- name: "orders-api",
112
- modules: [
113
- backendModule,
114
- ],
202
+ const scope =
203
+ app.createScope({
204
+ name: "request:123",
115
205
  });
116
206
  ```
117
207
 
118
- ### Infrastructure lifecycle
208
+ Infrastructure resources still use `app.addResource()`.
119
209
 
120
- ```ts
121
- app.addResource({
122
- name: "database",
123
-
124
- start() {
125
- return database.connect();
126
- },
127
-
128
- ready() {
129
- return database.ready;
130
- },
131
-
132
- stop() {
133
- return database.close();
134
- },
135
- });
136
- ```
137
-
138
- Startup is deterministic:
210
+ Application startup order:
139
211
 
140
212
  ```text
141
213
  application.setup()
142
214
 
215
+ bcp:container
216
+
143
217
  plugin setup/start
144
218
 
145
219
  resources start
@@ -149,47 +223,11 @@ application.start()
149
223
  ready
150
224
  ```
151
225
 
152
- Shutdown reverses dependencies:
226
+ Shutdown reverses resource dependencies, so injected services remain alive until application resources/plugins have stopped. The container is then disposed, followed by `application.dispose()`.
153
227
 
154
- ```text
155
- application.stop()
156
-
157
- resources stop (reverse order)
158
-
159
- plugin stop/dispose
160
-
161
- application.dispose()
162
- ```
163
-
164
- Start failures roll back already-started resources using Deployment Platform semantics.
165
-
166
- ### Readiness and diagnostics
167
-
168
- ```ts
169
- const readiness =
170
- await app.readiness();
171
-
172
- const diagnostics =
173
- await app.diagnostics();
174
- ```
175
-
176
- Graceful signal handling:
177
-
178
- ```ts
179
- const removeSignals =
180
- app.installSignalHandlers();
181
- ```
182
-
183
- Framework shutdown registry:
184
-
185
- ```ts
186
- const unregister =
187
- app.registerShutdownHook();
188
- ```
189
-
190
- Read more: [Application Platform](docs/application-platform.md) and [Migrating to 0.3.0](docs/migration-0.3.md).
228
+ Read more: [Application Platform](docs/application-platform.md) and [Migrating to 0.3.x](docs/migration-0.3.md).
191
229
 
192
- ## Public entrypoints — 0.3.0 baseline
230
+ ## Public entrypoints — 0.3.1 baseline
193
231
 
194
232
  ```text
195
233
  bcp
@@ -208,6 +246,7 @@ bcp/testing
208
246
  bcp/plugins
209
247
  bcp/observability
210
248
  bcp/deployment
249
+ bcp/container
211
250
  bcp/application
212
251
  bcp/server
213
252
  bcp/server-only
@@ -220,6 +259,7 @@ Application code should use public entrypoints rather than private `packages/*`
220
259
 
221
260
  ```ts
222
261
  import { createApp } from "bcp/application";
262
+ import { createServiceContainer } from "bcp/container";
223
263
  import { createCacheStore } from "bcp/cache";
224
264
  import { db } from "bcp/database";
225
265
  import { createAuth } from "bcp/auth";
@@ -232,7 +272,7 @@ import { createTracer } from "bcp/observability";
232
272
  import { createDeploymentRuntime } from "bcp/deployment";
233
273
  ```
234
274
 
235
- You may use these systems independently or compose selected instances through `createApp()`.
275
+ These systems remain independently usable. Application Platform coordinates selected instances and the DI container adds typed dependency composition.
236
276
 
237
277
  ## Compiled production entrypoints
238
278
 
@@ -251,6 +291,7 @@ bcp/testing -> testing.mjs
251
291
  bcp/plugins -> plugins.mjs
252
292
  bcp/observability -> observability.mjs
253
293
  bcp/deployment -> deployment.mjs
294
+ bcp/container -> container.mjs
254
295
  bcp/application -> application.mjs
255
296
  bcp/server -> server.mjs
256
297
  bcp/middleware -> middleware.mjs
@@ -293,36 +334,18 @@ bcp generate migration create_users
293
334
 
294
335
  ## API baseline and release readiness
295
336
 
296
- `0.2.19` froze the `0.2.x` public contract. `0.3.0` intentionally establishes the next additive baseline with `bcp/application` while preserving existing entrypoints.
297
-
298
- Check the current baseline:
337
+ `0.2.19` froze the `0.2.x` contract. `0.3.0` established the Application Platform baseline. `0.3.1` advances that baseline additively with `bcp/container` and no intentional breaking changes from `0.3.0`.
299
338
 
300
339
  ```bash
301
340
  npm run api:check
302
- ```
303
-
304
- Regenerate the snapshot only for an intentional reviewed platform-baseline change:
305
-
306
- ```bash
307
- npm run api:snapshot
308
- ```
309
-
310
- Release metadata readiness:
311
-
312
- ```bash
313
341
  npm run release:readiness
314
- ```
315
-
316
- Optional machine-readable report:
317
-
318
- ```bash
319
342
  npm run release:readiness:report
320
343
  ```
321
344
 
322
- Output:
345
+ Regenerate the snapshot only for an intentional reviewed baseline change:
323
346
 
324
- ```text
325
- .bcp-framework/release-readiness.json
347
+ ```bash
348
+ npm run api:snapshot
326
349
  ```
327
350
 
328
351
  ## Machine-readable contracts
@@ -336,7 +359,7 @@ docs/api-freeze-snapshot.json
336
359
 
337
360
  ## Release validation
338
361
 
339
- Before publishing `0.3.0`:
362
+ Before publishing `0.3.1`:
340
363
 
341
364
  ```bash
342
365
  npm run typecheck
@@ -382,12 +405,13 @@ Do not tag or publish until the exact final release commit passes the full RC se
382
405
  | `0.2.18` | Deployment Platform v2 |
383
406
  | `0.2.19` | Stability & API Freeze |
384
407
  | `0.3.0` | BCP Application Platform |
408
+ | `0.3.1` | Dependency Injection & Service Container |
385
409
 
386
410
  ## Roadmap
387
411
 
388
- The next milestone is **`0.3.1Dependency Injection & Service Container`**, building typed service tokens, singleton/scoped/transient lifetimes, request scopes, factories and testing overrides on top of the Application Platform service composition model.
412
+ The next milestone is **`0.3.2Module System v2`**, focused on application-native modules that can compose providers, plugins, routes, middleware, jobs and lifecycle contributions around the `createApp()` composition root.
389
413
 
390
- Later `0.3.x` milestones expand modules, typed APIs, SDK generation, identity/authorization, multi-tenancy, developer tooling and build/runtime targets.
414
+ Later `0.3.x` milestones expand routing/API contracts, repositories, validation/DTOs, SDK generation, identity/authorization, multi-tenancy, developer tooling and build/runtime targets.
391
415
 
392
416
  Native desktop/mobile compilation remains later roadmap work.
393
417
 
package/docs/README.md CHANGED
@@ -2,21 +2,21 @@
2
2
 
3
3
  The `docs/` directory is the documentation source of truth for BCP Framework and is organized for **`bcp-docs-web`**.
4
4
 
5
- > **Documentation target:** BCP Framework `0.3.0BCP Application Platform`
5
+ > **Documentation target:** BCP Framework `0.3.1Dependency Injection & Service Container`
6
6
  >
7
- > **Release state:** unreleased development target until RC validation, tagging and npm publication complete.
7
+ > **Release state:** unreleased until the complete RC validation, tagging and npm publication finish.
8
8
 
9
9
  ## Documentation architecture
10
10
 
11
11
  ```text
12
12
  docs/docs-web-manifest.json
13
- -> website navigation, routes, Markdown sources and release routes
13
+ -> website navigation, Markdown sources and release routes
14
14
 
15
15
  docs/platform-manifest.json
16
16
  -> framework version, runtime target, public entrypoints and capabilities
17
17
 
18
18
  docs/api-manifest.json
19
- -> public package entrypoints, source ownership and guide mapping
19
+ -> public package ownership and guide mapping
20
20
 
21
21
  docs/api-freeze-snapshot.json
22
22
  -> reviewed public/CLI/prepared-package API baseline
@@ -24,107 +24,87 @@ docs/api-freeze-snapshot.json
24
24
 
25
25
  Framework source and tests remain authoritative for runtime behavior.
26
26
 
27
- ## Current platform milestones
27
+ ## Current milestones
28
28
 
29
29
  | Version | Milestone |
30
30
  | --- | --- |
31
- | `0.2.0` | Framework Platform |
32
- | `0.2.1` | Documentation Platform |
33
- | `0.2.2` | Configuration & Environment v2 |
34
- | `0.2.3` | Database Platform v2 |
35
- | `0.2.4` | Application Packaging |
36
- | `0.2.5` | Authentication Platform v2 |
37
- | `0.2.6` | Authorization & Security v2 |
38
- | `0.2.7` | Observability Platform v2 |
39
- | `0.2.8` | Background Jobs Platform |
40
- | `0.2.9` | Job Scheduling Platform |
41
- | `0.2.10` | Durable Jobs Platform |
42
- | `0.2.11` | Workflow Orchestration |
43
- | `0.2.12` | Transactional Outbox & Events |
44
- | `0.2.13` | Realtime Platform |
45
- | `0.2.14` | Testing Platform |
46
31
  | `0.2.15` | Plugin & Module Platform |
47
32
  | `0.2.16` | Cache Platform v2 |
48
33
  | `0.2.17` | Observability Platform v3 |
49
34
  | `0.2.18` | Deployment Platform v2 |
50
35
  | `0.2.19` | Stability & API Freeze |
51
36
  | `0.3.0` | BCP Application Platform |
37
+ | `0.3.1` | Dependency Injection & Service Container |
52
38
 
53
- ## 0.3.0BCP Application Platform
39
+ ## 0.3.1Dependency Injection & Service Container
54
40
 
55
- `0.3.0` adds one server-only public composition root:
41
+ New public entrypoint:
56
42
 
57
43
  ```text
58
- bcp/application
44
+ bcp/container
59
45
  ```
60
46
 
61
47
  Primary APIs:
62
48
 
63
- ```ts
64
- import {
65
- createApp,
66
- defineApp,
67
- } from "bcp/application";
49
+ ```text
50
+ createServiceToken
51
+ createServiceContainer
52
+ provideValue
53
+ provideFactory
54
+ provideClass
68
55
  ```
69
56
 
70
- The application runtime composes existing Plugin and Deployment platforms instead of duplicating them. It provides:
57
+ The container provides typed service tokens, singleton/scoped/transient lifetimes, child scopes, testing overrides, dependency graph diagnostics, circular-dependency detection and reverse-order disposal.
58
+
59
+ `bcp/application` now exposes:
60
+
61
+ ```text
62
+ app.container
63
+ app.context.container
64
+ app.register(provider)
65
+ app.createScope(options)
66
+ ```
71
67
 
72
- - typed application config parsing;
73
- - a shared service registry and hook bus;
74
- - existing plugin/module composition;
75
- - application-owned deployment resources;
76
- - deterministic startup/shutdown ordering;
77
- - startup rollback;
78
- - readiness and diagnostics;
79
- - signal/shutdown-hook integration;
80
- - compiled `application.mjs` production runtime.
68
+ The Plugin Platform `services` registry remains available for compatibility. New typed dependency injection should prefer `container`.
81
69
 
82
- Lifecycle:
70
+ Application lifecycle order is now:
83
71
 
84
72
  ```text
85
73
  application.setup
86
74
 
87
- plugins
75
+ bcp:container
88
76
 
89
- resources
90
-
91
- application.start
92
-
93
- ready
94
-
95
- shutdown:
96
- application.stop
97
-
98
- resources (reverse)
77
+ bcp:plugins
99
78
 
100
- plugins
79
+ resources
101
80
 
102
- application.dispose
81
+ bcp:application
103
82
  ```
104
83
 
105
- Read [Application Platform](application-platform.md) and [Migrating to 0.3.0](migration-0.3.md).
84
+ Shutdown reverses deployment resources so the DI container remains available until application resources and plugins have stopped.
106
85
 
107
- ## API baseline
86
+ Read [Dependency Injection & Service Container](service-container.md), [Application Platform](application-platform.md) and [Migrating to 0.3.x](migration-0.3.md).
108
87
 
109
- `0.2.19` froze the final `0.2.x` public contract. `0.3.0` establishes the next reviewed baseline by adding `bcp/application` without intentionally removing existing `0.2.19` entrypoints.
88
+ ## API baseline
110
89
 
111
- Validate the current baseline:
90
+ `0.3.1` advances the reviewed `0.3.0` baseline additively by adding `bcp/container`.
112
91
 
113
- ```bash
114
- npm run api:check
92
+ ```text
93
+ previous baseline: 0.3.0
94
+ intentional breaking changes: false
115
95
  ```
116
96
 
117
- Regenerate only when an intentional platform-baseline change is being reviewed:
97
+ Validate:
118
98
 
119
99
  ```bash
120
- npm run api:snapshot
100
+ npm run api:check
101
+ npm run release:readiness
121
102
  ```
122
103
 
123
- Release metadata readiness:
104
+ Regenerate `docs/api-freeze-snapshot.json` only for an intentional reviewed platform contract change:
124
105
 
125
106
  ```bash
126
- npm run release:readiness
127
- npm run release:readiness:report
107
+ npm run api:snapshot
128
108
  ```
129
109
 
130
110
  ## Update rule
@@ -134,33 +114,27 @@ When framework behavior or public surface changes:
134
114
  1. Update framework source.
135
115
  2. Add/update regression tests.
136
116
  3. Update the matching Markdown guide.
137
- 4. Update `platform-manifest.json` for runtime/public-entrypoint/capability changes.
138
- 5. Update `api-manifest.json` for public API ownership/guide changes.
139
- 6. Update `docs-web-manifest.json` for website route/navigation changes.
140
- 7. Review the API baseline snapshot when public/package contracts change.
117
+ 4. Update `platform-manifest.json`.
118
+ 5. Update `api-manifest.json`.
119
+ 6. Update `docs-web-manifest.json`.
120
+ 7. Review/update the API baseline snapshot when public/package contracts change.
141
121
  8. Update `docs/releases/<version>.md`.
142
- 9. Change release state only after the release workflow reaches that state.
122
+ 9. Keep the release state `unreleased` until release completion.
143
123
 
144
124
  ## Important docs-web routes
145
125
 
146
126
  | Website route | Markdown source |
147
127
  | --- | --- |
148
128
  | `/docs/application-platform` | `application-platform.md` |
129
+ | `/docs/service-container` | `service-container.md` |
149
130
  | `/docs/migration-0.3` | `migration-0.3.md` |
150
131
  | `/docs/stability-api-freeze` | `stability-api-freeze.md` |
151
132
  | `/docs/observability-v3` | `observability-v3.md` |
152
133
  | `/docs/deployment-platform-v2` | `deployment-platform-v2.md` |
153
- | `/docs/durable-jobs` | `durable-jobs.md` |
154
- | `/docs/workflow-orchestration` | `workflow-orchestration.md` |
155
- | `/docs/transactional-outbox-events` | `transactional-outbox-events.md` |
156
- | `/docs/realtime-platform` | `realtime-platform.md` |
157
134
  | `/docs/testing-platform` | `testing-platform.md` |
158
135
  | `/docs/plugin-module-platform` | `plugin-module-platform.md` |
159
- | `/docs/cache-platform-v2` | `cache-platform-v2.md` |
160
136
  | `/docs/api-reference` | `api-reference.md` |
161
- | `/releases/0.3.0` | `releases/0.3.0.md` |
162
-
163
- Every route/source pair is validated by unit tests.
137
+ | `/releases/0.3.1` | `releases/0.3.1.md` |
164
138
 
165
139
  ## Public entrypoints
166
140
 
@@ -181,17 +155,18 @@ bcp/testing
181
155
  bcp/plugins
182
156
  bcp/observability
183
157
  bcp/deployment
158
+ bcp/container
184
159
  bcp/application
185
160
  bcp/server
186
161
  bcp/server-only
187
162
  bcp/middleware
188
163
  ```
189
164
 
190
- The API manifest, platform manifest and reviewed API baseline must remain aligned.
165
+ The API manifest, platform manifest and API snapshot must remain aligned.
191
166
 
192
167
  ## Release validation
193
168
 
194
- Before publishing `0.3.0`:
169
+ Before publishing `0.3.1`:
195
170
 
196
171
  ```bash
197
172
  npm run typecheck
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "framework": "bcp",
4
- "version": "0.3.0",
5
- "baselineVersion": "0.2.19",
4
+ "version": "0.3.1",
5
+ "baselineVersion": "0.3.0",
6
6
  "state": "frozen",
7
7
  "intentionalBreakingChanges": false,
8
8
  "publicEntrypoints": [
@@ -22,6 +22,7 @@
22
22
  "bcp/plugins",
23
23
  "bcp/observability",
24
24
  "bcp/deployment",
25
+ "bcp/container",
25
26
  "bcp/application",
26
27
  "bcp/server",
27
28
  "bcp/server-only",
@@ -65,6 +66,11 @@
65
66
  "default": "./packages/client/src/config.mjs",
66
67
  "types": "./packages/client/src/config.ts"
67
68
  },
69
+ "./container": {
70
+ "browser": "./packages/client/src/server-only.browser.mjs",
71
+ "default": "./packages/client/src/container.mjs",
72
+ "types": "./packages/client/src/container.ts"
73
+ },
68
74
  "./database": {
69
75
  "browser": "./packages/client/src/server-only.browser.mjs",
70
76
  "default": "./packages/client/src/database.mjs",
@@ -219,6 +225,11 @@
219
225
  "source": "packages/client/src/deployment.ts",
220
226
  "environment": "server"
221
227
  },
228
+ {
229
+ "package": "bcp/container",
230
+ "source": "packages/client/src/container.ts",
231
+ "environment": "server"
232
+ },
222
233
  {
223
234
  "package": "bcp/application",
224
235
  "source": "packages/client/src/application.ts",