@chidchanun/bcp 0.1.29 → 0.2.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 +199 -360
- package/docs/README.md +172 -365
- package/docs/api-manifest.json +129 -0
- package/docs/api-reference.md +214 -0
- package/docs/docs-web-manifest.json +29 -2
- package/docs/documentation-platform.md +136 -0
- package/docs/migration-0.2.md +173 -0
- package/docs/platform-contract.md +159 -0
- package/docs/platform-manifest.json +81 -0
- package/docs/releases/0.2.0.md +146 -0
- package/docs/releases/0.2.1.md +132 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
# BCP Framework
|
|
2
2
|
|
|
3
|
-
BCP Framework is a React full-stack framework
|
|
3
|
+
BCP Framework is a React full-stack framework for file-based routing, SSR, SPA navigation, server data loading, guarded application flows, API routes, authentication, database access, validation, uploads, storage and standalone Node.js production deployment.
|
|
4
4
|
|
|
5
|
-
> **Development target:** `0.1
|
|
5
|
+
> **Development target:** `0.2.1 — Documentation Platform`
|
|
6
6
|
>
|
|
7
|
-
>
|
|
7
|
+
> `0.2.1` is an unreleased development target until local validation, RC checks, tagging and npm publication complete.
|
|
8
|
+
|
|
9
|
+
## 0.2 platform
|
|
10
|
+
|
|
11
|
+
`0.2.0` established the Framework Platform baseline. `0.2.1` builds a machine-readable Documentation Platform on top of that baseline without intentionally removing application runtime public entrypoints.
|
|
12
|
+
|
|
13
|
+
The authoritative platform/documentation contracts are:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
docs/platform-manifest.json
|
|
17
|
+
-> runtime target, public entrypoints, capabilities and compatibility
|
|
18
|
+
|
|
19
|
+
docs/docs-web-manifest.json
|
|
20
|
+
-> docs sections, routes, Markdown sources and releases
|
|
21
|
+
|
|
22
|
+
docs/api-manifest.json
|
|
23
|
+
-> public package entrypoints, source ownership and guide routes
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Authored documentation remains under `docs/*.md`.
|
|
27
|
+
|
|
28
|
+
Read more:
|
|
29
|
+
|
|
30
|
+
- [Framework Platform Contract](docs/platform-contract.md)
|
|
31
|
+
- [Documentation Platform](docs/documentation-platform.md)
|
|
32
|
+
- [API Reference](docs/api-reference.md)
|
|
33
|
+
- [Migrating to 0.2.x](docs/migration-0.2.md)
|
|
8
34
|
|
|
9
35
|
## Current capabilities
|
|
10
36
|
|
|
@@ -12,29 +38,29 @@ BCP Framework is a React full-stack framework focused on file-based routing, SSR
|
|
|
12
38
|
| --- | --- |
|
|
13
39
|
| Application | React SSR, hydration, layouts, metadata and SPA navigation |
|
|
14
40
|
| Routing | Static, dynamic, catch-all, optional catch-all and route groups |
|
|
15
|
-
| Server data | `loader.ts`, request-scoped server APIs |
|
|
41
|
+
| Server data | Route `loader.ts`, request-scoped server APIs |
|
|
16
42
|
| Mutations | Route-owned `actions.ts` and `<Form>` |
|
|
17
43
|
| Authorization | `guard.ts`, `requireAuth()`, `requireRole()` |
|
|
18
44
|
| Authentication | JWT cookie sessions and auth helpers |
|
|
19
45
|
| Middleware | Middleware System v2 with onion execution |
|
|
20
|
-
| Validation | Typed
|
|
46
|
+
| Validation | Typed validators and structured validation errors |
|
|
21
47
|
| Error handling | HTTP error helpers and consistent error responses |
|
|
22
|
-
| Database | MySQL
|
|
48
|
+
| Database | MySQL helpers, transactions and migrations |
|
|
23
49
|
| Logging | Structured logger, request logger and request IDs |
|
|
24
50
|
| Uploads | Buffered multipart helpers and production multipart streaming |
|
|
25
|
-
| Storage | Local + S3-compatible
|
|
51
|
+
| Storage | Local + S3-compatible storage, streaming, list/copy/move, metadata, bulk delete and signed URLs |
|
|
26
52
|
| Caching | Response cache and revalidation primitives |
|
|
27
|
-
| Developer tools |
|
|
28
|
-
| Production | Standalone build, hardening gateway, graceful shutdown, trusted
|
|
29
|
-
| Documentation |
|
|
53
|
+
| Developer tools | Generators, Doctor/Inspect v2, updater, route inspection and project metadata |
|
|
54
|
+
| Production | Standalone Node.js build, hardening gateway, graceful shutdown, trusted proxy controls and HTTP timeouts |
|
|
55
|
+
| Documentation | Manifest-driven docs navigation, platform metadata and public API entrypoint reference |
|
|
30
56
|
|
|
31
57
|
## Requirements
|
|
32
58
|
|
|
33
|
-
- Node.js `24.11` or newer
|
|
59
|
+
- Node.js `24.11.0` or newer
|
|
34
60
|
- React `19`
|
|
35
61
|
- npm
|
|
36
62
|
|
|
37
|
-
Database
|
|
63
|
+
Database framework primitives currently target MySQL. `create-bcp-app` can also scaffold PostgreSQL, SQLite and MongoDB application helpers.
|
|
38
64
|
|
|
39
65
|
## Quick start
|
|
40
66
|
|
|
@@ -44,32 +70,24 @@ cd my-app
|
|
|
44
70
|
npm run dev
|
|
45
71
|
```
|
|
46
72
|
|
|
47
|
-
Generated projects normally
|
|
73
|
+
Generated projects normally keep one framework dependency key:
|
|
48
74
|
|
|
49
75
|
```json
|
|
50
76
|
{
|
|
51
77
|
"dependencies": {
|
|
52
78
|
"bcp": "npm:@chidchanun/bcp@latest"
|
|
53
|
-
},
|
|
54
|
-
"scripts": {
|
|
55
|
-
"dev": "bcp dev",
|
|
56
|
-
"build": "bcp build",
|
|
57
|
-
"start": "bcp start",
|
|
58
|
-
"routes": "bcp routes",
|
|
59
|
-
"update": "bcp update",
|
|
60
|
-
"typecheck": "tsc --noEmit"
|
|
61
79
|
}
|
|
62
80
|
}
|
|
63
81
|
```
|
|
64
82
|
|
|
65
|
-
|
|
83
|
+
Do not install both `bcp` and a second direct `@chidchanun/bcp` dependency in the same application; duplicate framework copies can create separate React/framework contexts.
|
|
66
84
|
|
|
67
85
|
## Application model
|
|
68
86
|
|
|
69
87
|
```text
|
|
70
88
|
Browser
|
|
71
89
|
↓
|
|
72
|
-
|
|
90
|
+
Security / middleware / cache
|
|
73
91
|
↓
|
|
74
92
|
Route guard
|
|
75
93
|
↓
|
|
@@ -80,7 +98,7 @@ React SSR
|
|
|
80
98
|
Hydration / SPA navigation
|
|
81
99
|
```
|
|
82
100
|
|
|
83
|
-
|
|
101
|
+
Typical route structure:
|
|
84
102
|
|
|
85
103
|
```text
|
|
86
104
|
app/
|
|
@@ -98,73 +116,104 @@ app/
|
|
|
98
116
|
└─ route.ts
|
|
99
117
|
```
|
|
100
118
|
|
|
101
|
-
##
|
|
119
|
+
## Public entrypoints
|
|
102
120
|
|
|
103
|
-
|
|
121
|
+
The `0.2.x` platform contract recognizes:
|
|
104
122
|
|
|
105
123
|
```text
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
124
|
+
bcp
|
|
125
|
+
bcp/island
|
|
126
|
+
bcp/cache
|
|
127
|
+
bcp/config
|
|
128
|
+
bcp/validation
|
|
129
|
+
bcp/error
|
|
130
|
+
bcp/database
|
|
131
|
+
bcp/auth
|
|
132
|
+
bcp/server
|
|
133
|
+
bcp/server-only
|
|
134
|
+
bcp/middleware
|
|
135
|
+
```
|
|
112
136
|
|
|
113
|
-
|
|
114
|
-
|
|
137
|
+
Application code should use these public package entrypoints rather than importing internal framework files under `packages/`.
|
|
138
|
+
|
|
139
|
+
The public list is validated in both:
|
|
140
|
+
|
|
141
|
+
- [Platform Manifest](docs/platform-manifest.json)
|
|
142
|
+
- [API Manifest](docs/api-manifest.json)
|
|
143
|
+
|
|
144
|
+
See [API Reference](docs/api-reference.md) for ownership and related guides.
|
|
145
|
+
|
|
146
|
+
## CLI
|
|
147
|
+
|
|
148
|
+
Core commands:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
bcp dev
|
|
152
|
+
bcp build
|
|
153
|
+
bcp start
|
|
154
|
+
bcp routes
|
|
155
|
+
bcp update
|
|
156
|
+
bcp doctor
|
|
157
|
+
bcp inspect
|
|
158
|
+
bcp version
|
|
115
159
|
```
|
|
116
160
|
|
|
117
|
-
|
|
161
|
+
Database migrations:
|
|
118
162
|
|
|
119
|
-
|
|
163
|
+
```bash
|
|
164
|
+
bcp db create create_users
|
|
165
|
+
bcp db migrate
|
|
166
|
+
bcp db status
|
|
167
|
+
bcp db rollback
|
|
168
|
+
```
|
|
120
169
|
|
|
121
|
-
|
|
170
|
+
Project generators:
|
|
122
171
|
|
|
123
172
|
```bash
|
|
124
173
|
bcp generate page dashboard/users
|
|
125
|
-
bcp generate page users/[id]
|
|
126
174
|
bcp generate api users
|
|
127
175
|
bcp generate middleware
|
|
128
176
|
bcp generate migration create_users
|
|
129
177
|
```
|
|
130
178
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
```text
|
|
134
|
-
page -> app/<route>/page.tsx
|
|
135
|
-
api -> app/api/<route>/route.ts
|
|
136
|
-
middleware -> middleware.ts
|
|
137
|
-
migration -> migrations/<timestamp>_<name>.ts
|
|
138
|
-
```
|
|
179
|
+
Page/API/middleware generators require `--force` before replacing an existing scaffold target.
|
|
139
180
|
|
|
140
|
-
|
|
181
|
+
On Windows, Microsoft SQL Server may provide another `bcp.exe`. For direct PowerShell usage prefer the project-local collision-free alias:
|
|
141
182
|
|
|
142
|
-
```
|
|
143
|
-
|
|
183
|
+
```powershell
|
|
184
|
+
npm exec -- bcp-framework doctor
|
|
185
|
+
npm exec -- bcp-framework inspect
|
|
186
|
+
npm exec -- bcp-framework routes
|
|
187
|
+
npm exec -- bcp-framework generate page dashboard/users
|
|
144
188
|
```
|
|
145
189
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
Read more: [Project Generators](docs/generators.md)
|
|
190
|
+
## Routing, loaders, guards and actions
|
|
149
191
|
|
|
150
|
-
|
|
192
|
+
BCP discovers pages from `app/**/page.tsx` and API handlers from `app/**/route.ts`.
|
|
151
193
|
|
|
152
|
-
|
|
194
|
+
```text
|
|
195
|
+
app/page.tsx /
|
|
196
|
+
app/users/[id]/page.tsx /users/:id
|
|
197
|
+
app/docs/[...slug]/page.tsx /docs/*
|
|
198
|
+
app/catalog/[[...slug]]/page.tsx /catalog and /catalog/*
|
|
199
|
+
app/(admin)/settings/page.tsx /settings
|
|
200
|
+
app/api/users/route.ts /api/users
|
|
201
|
+
```
|
|
153
202
|
|
|
154
|
-
|
|
155
|
-
import {
|
|
156
|
-
requireRole,
|
|
157
|
-
} from "bcp/auth";
|
|
203
|
+
Route-owned server features stay colocated:
|
|
158
204
|
|
|
159
|
-
|
|
160
|
-
|
|
205
|
+
```text
|
|
206
|
+
page.tsx
|
|
207
|
+
loader.ts
|
|
208
|
+
guard.ts
|
|
209
|
+
actions.ts
|
|
161
210
|
```
|
|
162
211
|
|
|
163
|
-
|
|
212
|
+
Guides:
|
|
164
213
|
|
|
214
|
+
- [Routing](docs/routing.md)
|
|
165
215
|
- [Server Data Loaders](docs/server-data-loaders.md)
|
|
166
216
|
- [Route Guards](docs/route-guards.md)
|
|
167
|
-
- [Auth Route Guards](docs/auth-route-guards.md)
|
|
168
217
|
- [Form Actions](docs/form-actions.md)
|
|
169
218
|
|
|
170
219
|
## Authentication and server APIs
|
|
@@ -185,9 +234,7 @@ import {
|
|
|
185
234
|
} from "bcp/server";
|
|
186
235
|
```
|
|
187
236
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
Read more:
|
|
237
|
+
Guides:
|
|
191
238
|
|
|
192
239
|
- [Authentication](docs/authentication.md)
|
|
193
240
|
- [JWT Sessions](docs/session-auth.md)
|
|
@@ -201,168 +248,42 @@ import {
|
|
|
201
248
|
} from "bcp/database";
|
|
202
249
|
```
|
|
203
250
|
|
|
204
|
-
|
|
251
|
+
BCP's database layer includes lazy MySQL pool creation, query/execute helpers, transactions and migrations.
|
|
205
252
|
|
|
206
|
-
|
|
207
|
-
bcp db create create_users
|
|
208
|
-
bcp db migrate
|
|
209
|
-
bcp db status
|
|
210
|
-
bcp db rollback
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Read more:
|
|
253
|
+
Guides:
|
|
214
254
|
|
|
215
255
|
- [Database](docs/database.md)
|
|
216
256
|
- [Database Migrations](docs/database-migrations.md)
|
|
217
257
|
|
|
218
|
-
##
|
|
219
|
-
|
|
220
|
-
BCP supports the original buffered multipart helpers as well as production multipart-to-storage streaming:
|
|
221
|
-
|
|
222
|
-
```ts
|
|
223
|
-
import {
|
|
224
|
-
storeMultipartFile,
|
|
225
|
-
} from "bcp/server";
|
|
226
|
-
|
|
227
|
-
const stored =
|
|
228
|
-
await storeMultipartFile(
|
|
229
|
-
request,
|
|
230
|
-
{
|
|
231
|
-
storage,
|
|
232
|
-
fieldName: "file",
|
|
233
|
-
key: "documents/report.pdf",
|
|
234
|
-
maxBytes: 100 * 1024 * 1024,
|
|
235
|
-
constraints: {
|
|
236
|
-
maxBytes: 80 * 1024 * 1024,
|
|
237
|
-
allowedTypes: [
|
|
238
|
-
"application/pdf",
|
|
239
|
-
],
|
|
240
|
-
},
|
|
241
|
-
}
|
|
242
|
-
);
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
`storeMultipartFile()` consumes `Request.body` incrementally and streams the selected file directly into storage. Request/body infrastructure limits still apply.
|
|
246
|
-
|
|
247
|
-
Read more: [File Upload](docs/file-upload.md)
|
|
248
|
-
|
|
249
|
-
## Storage
|
|
250
|
-
|
|
251
|
-
### Local filesystem
|
|
252
|
-
|
|
253
|
-
```ts
|
|
254
|
-
import {
|
|
255
|
-
createLocalStorage,
|
|
256
|
-
} from "bcp/server";
|
|
257
|
-
|
|
258
|
-
const storage =
|
|
259
|
-
createLocalStorage({
|
|
260
|
-
directory: "./uploads",
|
|
261
|
-
});
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
`create-bcp-app --storage local` creates `lib/storage.ts` plus a visible `storage/README.md` / `.gitkeep` scaffold. Runtime objects remain ignored by Git.
|
|
265
|
-
|
|
266
|
-
### S3 / R2 / MinIO
|
|
267
|
-
|
|
268
|
-
```ts
|
|
269
|
-
import {
|
|
270
|
-
createS3Storage,
|
|
271
|
-
} from "bcp/server";
|
|
272
|
-
|
|
273
|
-
const storage =
|
|
274
|
-
createS3Storage({
|
|
275
|
-
bucket: process.env.S3_BUCKET!,
|
|
276
|
-
region: process.env.S3_REGION!,
|
|
277
|
-
endpoint: process.env.S3_ENDPOINT,
|
|
278
|
-
accessKeyId: process.env.S3_ACCESS_KEY_ID,
|
|
279
|
-
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
|
|
280
|
-
});
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
Custom endpoints and `forcePathStyle` support common S3-compatible deployments such as MinIO. Keep credentials server-only.
|
|
284
|
-
|
|
285
|
-
Read more: [S3-Compatible Storage](docs/s3-storage.md)
|
|
286
|
-
|
|
287
|
-
### Streaming storage
|
|
288
|
-
|
|
289
|
-
The stable minimum `StorageAdapter` retains its buffered API while adapters can expose optional `putStream()` and `readStream()` implementations.
|
|
290
|
-
|
|
291
|
-
```ts
|
|
292
|
-
import {
|
|
293
|
-
getStorageCapabilities,
|
|
294
|
-
putStorageStream,
|
|
295
|
-
readStorageStream,
|
|
296
|
-
} from "bcp/server";
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
Both built-in local and S3 adapters support streaming reads/writes and byte ranges.
|
|
300
|
-
|
|
301
|
-
Read more: [Storage and File Delivery](docs/storage.md)
|
|
302
|
-
|
|
303
|
-
### Storage Ecosystem — 0.1.27
|
|
304
|
-
|
|
305
|
-
BCP `0.1.27` added a richer, additive object-storage API without invalidating older `StorageAdapter` implementations:
|
|
306
|
-
|
|
307
|
-
```ts
|
|
308
|
-
import {
|
|
309
|
-
copyStorageObject,
|
|
310
|
-
createStorageSignedReadUrl,
|
|
311
|
-
createStorageSignedWriteUrl,
|
|
312
|
-
deleteStorageObjects,
|
|
313
|
-
getStorageEcosystemCapabilities,
|
|
314
|
-
getStorageMetadata,
|
|
315
|
-
listStorageObjects,
|
|
316
|
-
moveStorageObject,
|
|
317
|
-
setStorageMetadata,
|
|
318
|
-
} from "bcp/server";
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
Listing supports prefix filtering, limits and opaque cursors. Copy and move use native adapter operations when available, with portable fallback behavior where practical. Portable user metadata is string-to-string metadata and is distinct from authorization/business state.
|
|
258
|
+
## Storage and uploads
|
|
322
259
|
|
|
323
|
-
|
|
260
|
+
`create-bcp-app` can scaffold:
|
|
324
261
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
```ts
|
|
332
|
-
import {
|
|
333
|
-
createStorageResponse,
|
|
334
|
-
} from "bcp/server";
|
|
335
|
-
|
|
336
|
-
return createStorageResponse(
|
|
337
|
-
request,
|
|
338
|
-
storage,
|
|
339
|
-
"documents/report.pdf"
|
|
340
|
-
);
|
|
262
|
+
```text
|
|
263
|
+
None
|
|
264
|
+
Local Server
|
|
265
|
+
Amazon S3
|
|
266
|
+
Cloudflare R2
|
|
341
267
|
```
|
|
342
268
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
## Middleware, validation, errors and caching
|
|
269
|
+
BCP storage supports local and S3-compatible adapters, streaming reads/writes, ranges, object listing, copy/move, portable metadata, bulk deletion and S3 signed URLs.
|
|
346
270
|
|
|
347
|
-
|
|
271
|
+
Guides:
|
|
348
272
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
- [
|
|
352
|
-
- [
|
|
353
|
-
- [Error Handling](docs/error-handling.md)
|
|
354
|
-
- [Logging and Observability](docs/development-logging.md)
|
|
355
|
-
- [Caching](docs/caching.md)
|
|
356
|
-
- [Security](docs/security.md)
|
|
273
|
+
- [File Upload](docs/file-upload.md)
|
|
274
|
+
- [Storage & File Delivery](docs/storage.md)
|
|
275
|
+
- [Storage Ecosystem](docs/storage-ecosystem.md)
|
|
276
|
+
- [S3-Compatible Storage](docs/s3-storage.md)
|
|
357
277
|
|
|
358
278
|
## Production build
|
|
359
279
|
|
|
280
|
+
Build:
|
|
281
|
+
|
|
360
282
|
```bash
|
|
361
283
|
npm run build
|
|
362
|
-
npm run start
|
|
363
284
|
```
|
|
364
285
|
|
|
365
|
-
|
|
286
|
+
Output:
|
|
366
287
|
|
|
367
288
|
```text
|
|
368
289
|
.bcp-framework/build/
|
|
@@ -372,211 +293,129 @@ Standalone output is written under:
|
|
|
372
293
|
└─ server.mjs
|
|
373
294
|
```
|
|
374
295
|
|
|
375
|
-
|
|
296
|
+
Run:
|
|
376
297
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
```dotenv
|
|
380
|
-
BCP_REQUEST_TIMEOUT_MS=120000
|
|
381
|
-
BCP_HEADERS_TIMEOUT_MS=66000
|
|
382
|
-
BCP_KEEP_ALIVE_TIMEOUT_MS=65000
|
|
383
|
-
BCP_SHUTDOWN_TIMEOUT_MS=10000
|
|
384
|
-
BCP_TRUST_PROXY=false
|
|
298
|
+
```bash
|
|
299
|
+
npm run start
|
|
385
300
|
```
|
|
386
301
|
|
|
387
|
-
|
|
302
|
+
The `0.2.x` production target remains:
|
|
388
303
|
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
registerShutdownHook,
|
|
392
|
-
} from "bcp/server";
|
|
393
|
-
|
|
394
|
-
registerShutdownHook(
|
|
395
|
-
() => {
|
|
396
|
-
storage.destroy();
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
name: "storage",
|
|
400
|
-
}
|
|
401
|
-
);
|
|
304
|
+
```text
|
|
305
|
+
standalone-node
|
|
402
306
|
```
|
|
403
307
|
|
|
404
|
-
|
|
308
|
+
Native `.exe`, desktop and mobile compilation are future roadmap work and are not part of the current platform contract.
|
|
405
309
|
|
|
406
|
-
|
|
310
|
+
Production hardening supports configurable request/header/keep-alive/shutdown timeouts, trusted-proxy handling and `SIGTERM` / `SIGINT` graceful shutdown.
|
|
407
311
|
|
|
408
|
-
|
|
312
|
+
Read more: [Production Hardening](docs/production-hardening.md)
|
|
409
313
|
|
|
410
|
-
|
|
314
|
+
## Documentation Platform — 0.2.1
|
|
411
315
|
|
|
412
|
-
|
|
413
|
-
lockfile / package manager
|
|
414
|
-
multiple framework dependency declarations
|
|
415
|
-
standalone production artifact
|
|
416
|
-
Docker + reproducible install guidance
|
|
417
|
-
storage provider
|
|
418
|
-
production-hardening environment validity
|
|
419
|
-
```
|
|
316
|
+
`0.2.1` makes the framework repository directly consumable by `bcp-docs-web`.
|
|
420
317
|
|
|
421
|
-
|
|
318
|
+
Recommended website flow:
|
|
422
319
|
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
|
|
320
|
+
```text
|
|
321
|
+
selected framework ref
|
|
322
|
+
↓
|
|
323
|
+
docs/docs-web-manifest.json
|
|
324
|
+
docs/platform-manifest.json
|
|
325
|
+
docs/api-manifest.json
|
|
326
|
+
↓
|
|
327
|
+
validate version + release state + public entrypoints
|
|
328
|
+
↓
|
|
329
|
+
load referenced Markdown
|
|
330
|
+
↓
|
|
331
|
+
sync CMS/search/navigation
|
|
332
|
+
↓
|
|
333
|
+
render bcp-docs-web
|
|
426
334
|
```
|
|
427
335
|
|
|
428
|
-
|
|
336
|
+
`bcp-docs-web` should not maintain a second hard-coded framework page list.
|
|
429
337
|
|
|
430
|
-
|
|
338
|
+
The manifests provide:
|
|
431
339
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
"presets": {
|
|
441
|
-
"tailwind": true,
|
|
442
|
-
"database": "mysql",
|
|
443
|
-
"auth": "jwt-cookie",
|
|
444
|
-
"storage": "local"
|
|
445
|
-
}
|
|
446
|
-
}
|
|
340
|
+
```text
|
|
341
|
+
sidebar/category order
|
|
342
|
+
website routes
|
|
343
|
+
Markdown sources
|
|
344
|
+
version + release state
|
|
345
|
+
release routes
|
|
346
|
+
public package entrypoints
|
|
347
|
+
API guide ownership
|
|
447
348
|
```
|
|
448
349
|
|
|
449
|
-
|
|
350
|
+
The docs sync may target a release ref for historical content:
|
|
450
351
|
|
|
451
|
-
|
|
352
|
+
```powershell
|
|
353
|
+
npm run docs:sync -- --ref=v0.2.0
|
|
354
|
+
```
|
|
452
355
|
|
|
453
|
-
Read more:
|
|
356
|
+
Read more:
|
|
454
357
|
|
|
455
|
-
|
|
358
|
+
- [Documentation Platform](docs/documentation-platform.md)
|
|
359
|
+
- [Documentation Source Map](docs/README.md)
|
|
360
|
+
- [Docs-Web Manifest](docs/docs-web-manifest.json)
|
|
361
|
+
- [Platform Manifest](docs/platform-manifest.json)
|
|
362
|
+
- [API Manifest](docs/api-manifest.json)
|
|
456
363
|
|
|
457
|
-
|
|
364
|
+
## Updating from 0.1.x / 0.2.x
|
|
458
365
|
|
|
459
|
-
|
|
366
|
+
`0.2.1` does not intentionally remove application public entrypoints from the `0.2.0` baseline.
|
|
460
367
|
|
|
461
|
-
|
|
368
|
+
After upgrading, always rebuild the standalone artifact instead of reusing `.bcp-framework/build` from another framework version.
|
|
462
369
|
|
|
463
|
-
|
|
464
|
-
npm exec -- bcp-framework --version
|
|
465
|
-
npm exec -- bcp-framework doctor
|
|
466
|
-
npm exec -- bcp-framework inspect
|
|
467
|
-
npm exec -- bcp-framework routes
|
|
468
|
-
npm exec -- bcp-framework generate page dashboard/users
|
|
469
|
-
npm exec -- bcp-framework dev
|
|
470
|
-
npm exec -- bcp-framework build
|
|
471
|
-
```
|
|
370
|
+
Read more: [Migrating to 0.2.x](docs/migration-0.2.md)
|
|
472
371
|
|
|
473
|
-
|
|
372
|
+
## Release validation
|
|
474
373
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
```bash
|
|
478
|
-
bcp update
|
|
479
|
-
bcp update --check
|
|
480
|
-
bcp update --dry-run
|
|
481
|
-
bcp update 0.1.29
|
|
482
|
-
bcp update next
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
Read more: [Updating](docs/updating.md)
|
|
486
|
-
|
|
487
|
-
## Framework development and release validation
|
|
374
|
+
Framework releases must pass:
|
|
488
375
|
|
|
489
376
|
```bash
|
|
490
377
|
npm install
|
|
491
378
|
npm run typecheck
|
|
492
379
|
npm run test:unit
|
|
493
380
|
npm run test:integration
|
|
494
|
-
npm run test:e2e
|
|
495
381
|
npm run test:package
|
|
382
|
+
npm run test:e2e
|
|
496
383
|
npm run rc:check
|
|
497
384
|
```
|
|
498
385
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
Read more: [Releasing](docs/releasing.md)
|
|
502
|
-
|
|
503
|
-
## Documentation source and `bcp-docs-web`
|
|
504
|
-
|
|
505
|
-
The `docs/` directory is the authored source for **`bcp-docs-web`**.
|
|
506
|
-
|
|
507
|
-
Starting with `0.1.29`, docs-web should consume:
|
|
508
|
-
|
|
509
|
-
```text
|
|
510
|
-
docs/docs-web-manifest.json
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
for sidebar/navigation and route mapping. Markdown files remain the documentation content source of truth.
|
|
386
|
+
`0.2.1` adds Documentation Platform unit/package checks that validate manifest version parity, docs source existence, API/public-entrypoint parity and prepared npm documentation artifacts.
|
|
514
387
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
```text
|
|
518
|
-
section id/title
|
|
519
|
-
website route
|
|
520
|
-
Markdown source file
|
|
521
|
-
page title
|
|
522
|
-
version target
|
|
523
|
-
release state
|
|
524
|
-
release routes
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
Recommended starting points:
|
|
528
|
-
|
|
529
|
-
- [Docs-Web Manifest](docs/docs-web-manifest.json)
|
|
530
|
-
- [Documentation Source Map](docs/README.md)
|
|
531
|
-
- [Getting Started](docs/getting-started.md)
|
|
532
|
-
- [Configuration](docs/configuration.md)
|
|
533
|
-
- [Project Metadata](docs/project-metadata.md)
|
|
534
|
-
- [Routing](docs/routing.md)
|
|
535
|
-
- [Project Generators](docs/generators.md)
|
|
536
|
-
- [Server Data Loaders](docs/server-data-loaders.md)
|
|
537
|
-
- [Route Guards](docs/route-guards.md)
|
|
538
|
-
- [Form Actions](docs/form-actions.md)
|
|
539
|
-
- [Server Request APIs](docs/server-request-apis.md)
|
|
540
|
-
- [File Upload](docs/file-upload.md)
|
|
541
|
-
- [Storage and File Delivery](docs/storage.md)
|
|
542
|
-
- [Storage Ecosystem](docs/storage-ecosystem.md)
|
|
543
|
-
- [S3-Compatible Storage](docs/s3-storage.md)
|
|
544
|
-
- [Production Hardening](docs/production-hardening.md)
|
|
545
|
-
- [Authentication](docs/authentication.md)
|
|
546
|
-
- [Database](docs/database.md)
|
|
547
|
-
- [Middleware](docs/middleware.md)
|
|
548
|
-
- [Developer Tools](docs/developer-tools.md)
|
|
549
|
-
- [Deployment](docs/deployment.md)
|
|
550
|
-
- [Releasing](docs/releasing.md)
|
|
388
|
+
Do not tag or publish a release until the final release commit passes the complete RC sequence.
|
|
551
389
|
|
|
552
390
|
## Release history
|
|
553
391
|
|
|
554
392
|
| Version | Milestone |
|
|
555
393
|
| --- | --- |
|
|
556
|
-
| `0.1.20` | Hydration line-ending stabilization |
|
|
557
|
-
| `0.1.21` | Hydration semantic parity |
|
|
558
|
-
| `0.1.22` | Developer tools and diagnostics |
|
|
559
|
-
| `0.1.23` | Logging and observability |
|
|
560
394
|
| `0.1.24` | File Upload Foundation |
|
|
561
395
|
| `0.1.25` | Storage Adapters and File Delivery |
|
|
562
396
|
| `0.1.26` | S3-Compatible Storage and Production Streaming |
|
|
563
397
|
| `0.1.27` | Storage Ecosystem |
|
|
564
398
|
| `0.1.28` | Production Hardening |
|
|
565
399
|
| `0.1.29` | Developer Experience |
|
|
400
|
+
| `0.2.0` | Framework Platform |
|
|
401
|
+
| `0.2.1` | Documentation Platform |
|
|
566
402
|
|
|
567
|
-
##
|
|
403
|
+
## Roadmap
|
|
568
404
|
|
|
569
|
-
|
|
405
|
+
Next planned milestone:
|
|
406
|
+
|
|
407
|
+
```text
|
|
408
|
+
0.2.2 — Configuration & Environment v2
|
|
409
|
+
```
|
|
570
410
|
|
|
571
|
-
|
|
411
|
+
Focus:
|
|
572
412
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
5. a documented platform baseline for routing, data, auth, database, storage and runtime APIs.
|
|
413
|
+
- typed production configuration improvements,
|
|
414
|
+
- environment validation,
|
|
415
|
+
- startup configuration diagnostics,
|
|
416
|
+
- configuration schema/inspection tooling.
|
|
578
417
|
|
|
579
|
-
|
|
418
|
+
Application packaging (`bcp package`, native executable experiments) remains later `0.2.x` roadmap work.
|
|
580
419
|
|
|
581
420
|
## License
|
|
582
421
|
|