@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 +135 -111
- package/docs/README.md +53 -78
- package/docs/api-freeze-snapshot.json +13 -2
- package/docs/api-manifest.json +20 -12
- package/docs/api-reference.md +195 -197
- package/docs/application-platform.md +141 -171
- package/docs/docs-web-manifest.json +6 -4
- package/docs/migration-0.3.md +189 -68
- package/docs/platform-contract.md +53 -37
- package/docs/platform-manifest.json +21 -4
- package/docs/releases/0.3.1.md +116 -0
- package/docs/service-container.md +333 -0
- package/package.json +7 -1
- package/packages/bundler/src/client-boundary.ts +1 -0
- package/packages/client/src/application.mjs +586 -20
- package/packages/client/src/container.mjs +573 -0
- package/packages/client/src/container.ts +24 -0
- package/packages/server/src/application.ts +116 -5
- package/packages/server/src/container.ts +970 -0
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.
|
|
5
|
+
> **Development target:** `0.3.1 — Dependency Injection & Service Container`
|
|
6
6
|
>
|
|
7
|
-
> `0.3.
|
|
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,
|
|
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
|
-
##
|
|
65
|
+
## Dependency Injection & Service Container — 0.3.1
|
|
65
66
|
|
|
66
|
-
`0.3.
|
|
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
|
|
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
|
-
|
|
191
|
+
`app.services` remains the Plugin Platform compatibility registry. New typed dependencies should prefer `app.container`.
|
|
91
192
|
|
|
92
|
-
|
|
193
|
+
Applications can register DI providers before start:
|
|
93
194
|
|
|
94
195
|
```ts
|
|
95
|
-
app.
|
|
96
|
-
"database",
|
|
97
|
-
database
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
app.provide(
|
|
101
|
-
"cache",
|
|
102
|
-
cache
|
|
103
|
-
);
|
|
196
|
+
app.register(provider);
|
|
104
197
|
```
|
|
105
198
|
|
|
106
|
-
|
|
199
|
+
and create request/job/test scopes:
|
|
107
200
|
|
|
108
201
|
```ts
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
name: "
|
|
112
|
-
modules: [
|
|
113
|
-
backendModule,
|
|
114
|
-
],
|
|
202
|
+
const scope =
|
|
203
|
+
app.createScope({
|
|
204
|
+
name: "request:123",
|
|
115
205
|
});
|
|
116
206
|
```
|
|
117
207
|
|
|
118
|
-
|
|
208
|
+
Infrastructure resources still use `app.addResource()`.
|
|
119
209
|
|
|
120
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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`
|
|
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
|
-
|
|
345
|
+
Regenerate the snapshot only for an intentional reviewed baseline change:
|
|
323
346
|
|
|
324
|
-
```
|
|
325
|
-
|
|
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.
|
|
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.
|
|
412
|
+
The next milestone is **`0.3.2 — Module 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
|
|
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.
|
|
5
|
+
> **Documentation target:** BCP Framework `0.3.1 — Dependency Injection & Service Container`
|
|
6
6
|
>
|
|
7
|
-
> **Release state:** unreleased
|
|
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,
|
|
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
|
|
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
|
|
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.
|
|
39
|
+
## 0.3.1 — Dependency Injection & Service Container
|
|
54
40
|
|
|
55
|
-
|
|
41
|
+
New public entrypoint:
|
|
56
42
|
|
|
57
43
|
```text
|
|
58
|
-
bcp/
|
|
44
|
+
bcp/container
|
|
59
45
|
```
|
|
60
46
|
|
|
61
47
|
Primary APIs:
|
|
62
48
|
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
49
|
+
```text
|
|
50
|
+
createServiceToken
|
|
51
|
+
createServiceContainer
|
|
52
|
+
provideValue
|
|
53
|
+
provideFactory
|
|
54
|
+
provideClass
|
|
68
55
|
```
|
|
69
56
|
|
|
70
|
-
The
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
Application lifecycle order is now:
|
|
83
71
|
|
|
84
72
|
```text
|
|
85
73
|
application.setup
|
|
86
74
|
↓
|
|
87
|
-
|
|
75
|
+
bcp:container
|
|
88
76
|
↓
|
|
89
|
-
|
|
90
|
-
↓
|
|
91
|
-
application.start
|
|
92
|
-
↓
|
|
93
|
-
ready
|
|
94
|
-
|
|
95
|
-
shutdown:
|
|
96
|
-
application.stop
|
|
97
|
-
↓
|
|
98
|
-
resources (reverse)
|
|
77
|
+
bcp:plugins
|
|
99
78
|
↓
|
|
100
|
-
|
|
79
|
+
resources
|
|
101
80
|
↓
|
|
102
|
-
application
|
|
81
|
+
bcp:application
|
|
103
82
|
```
|
|
104
83
|
|
|
105
|
-
|
|
84
|
+
Shutdown reverses deployment resources so the DI container remains available until application resources and plugins have stopped.
|
|
106
85
|
|
|
107
|
-
|
|
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
|
-
|
|
88
|
+
## API baseline
|
|
110
89
|
|
|
111
|
-
|
|
90
|
+
`0.3.1` advances the reviewed `0.3.0` baseline additively by adding `bcp/container`.
|
|
112
91
|
|
|
113
|
-
```
|
|
114
|
-
|
|
92
|
+
```text
|
|
93
|
+
previous baseline: 0.3.0
|
|
94
|
+
intentional breaking changes: false
|
|
115
95
|
```
|
|
116
96
|
|
|
117
|
-
|
|
97
|
+
Validate:
|
|
118
98
|
|
|
119
99
|
```bash
|
|
120
|
-
npm run api:
|
|
100
|
+
npm run api:check
|
|
101
|
+
npm run release:readiness
|
|
121
102
|
```
|
|
122
103
|
|
|
123
|
-
|
|
104
|
+
Regenerate `docs/api-freeze-snapshot.json` only for an intentional reviewed platform contract change:
|
|
124
105
|
|
|
125
106
|
```bash
|
|
126
|
-
npm run
|
|
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
|
|
138
|
-
5. Update `api-manifest.json
|
|
139
|
-
6. Update `docs-web-manifest.json
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
5
|
-
"baselineVersion": "0.
|
|
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",
|