@chidchanun/bcp 0.1.28 → 0.2.0
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 +220 -256
- package/docs/README.md +257 -241
- package/docs/developer-tools.md +175 -78
- package/docs/docs-web-manifest.json +97 -0
- package/docs/generators.md +149 -0
- package/docs/migration-0.2.md +173 -0
- package/docs/platform-contract.md +159 -0
- package/docs/platform-manifest.json +75 -0
- package/docs/project-metadata.md +112 -0
- package/docs/releases/0.1.29.md +170 -0
- package/docs/releases/0.2.0.md +146 -0
- package/package.json +1 -1
- package/packages/cli/src/args.ts +96 -0
- package/packages/cli/src/developer-tools-v2.ts +629 -0
- package/packages/cli/src/developer-tools.ts +115 -0
- package/packages/cli/src/generate.ts +475 -0
- package/packages/cli/src/index.ts +69 -0
package/README.md
CHANGED
|
@@ -1,10 +1,38 @@
|
|
|
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.
|
|
5
|
+
> **Development target:** `0.2.0 — Framework Platform`
|
|
6
6
|
>
|
|
7
|
-
>
|
|
7
|
+
> `0.2.0` establishes the first explicit platform baseline for BCP. It remains an unreleased development target until local validation, RC checks, tagging and npm publication complete.
|
|
8
|
+
|
|
9
|
+
## Platform baseline — 0.2.0
|
|
10
|
+
|
|
11
|
+
BCP `0.2.0` consolidates the capabilities built across the `0.1.x` series into a documented and testable platform contract.
|
|
12
|
+
|
|
13
|
+
New platform sources:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
docs/platform-manifest.json
|
|
17
|
+
-> version, runtime target, public entrypoints and capability metadata
|
|
18
|
+
|
|
19
|
+
docs/docs-web-manifest.json
|
|
20
|
+
-> docs-web sections, routes, Markdown sources and releases
|
|
21
|
+
|
|
22
|
+
docs/platform-contract.md
|
|
23
|
+
-> public platform/compatibility contract
|
|
24
|
+
|
|
25
|
+
docs/migration-0.2.md
|
|
26
|
+
-> application upgrade guide
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The package release pipeline now verifies the platform contract against the prepared npm artifact so accidental public-export/version drift fails package validation.
|
|
30
|
+
|
|
31
|
+
Read more:
|
|
32
|
+
|
|
33
|
+
- [Framework Platform Contract](docs/platform-contract.md)
|
|
34
|
+
- [Migrating to 0.2.0](docs/migration-0.2.md)
|
|
35
|
+
- [Platform Manifest](docs/platform-manifest.json)
|
|
8
36
|
|
|
9
37
|
## Current capabilities
|
|
10
38
|
|
|
@@ -12,28 +40,29 @@ BCP Framework is a React full-stack framework focused on file-based routing, SSR
|
|
|
12
40
|
| --- | --- |
|
|
13
41
|
| Application | React SSR, hydration, layouts, metadata and SPA navigation |
|
|
14
42
|
| Routing | Static, dynamic, catch-all, optional catch-all and route groups |
|
|
15
|
-
| Server data | `loader.ts`, request-scoped server APIs |
|
|
43
|
+
| Server data | Route `loader.ts`, request-scoped server APIs |
|
|
16
44
|
| Mutations | Route-owned `actions.ts` and `<Form>` |
|
|
17
45
|
| Authorization | `guard.ts`, `requireAuth()`, `requireRole()` |
|
|
18
46
|
| Authentication | JWT cookie sessions and auth helpers |
|
|
19
47
|
| Middleware | Middleware System v2 with onion execution |
|
|
20
48
|
| Validation | Typed validation helpers and structured validation errors |
|
|
21
49
|
| Error handling | HTTP error helpers and consistent error responses |
|
|
22
|
-
| Database | MySQL
|
|
50
|
+
| Database | MySQL helpers, transactions and migrations |
|
|
23
51
|
| Logging | Structured logger, request logger and request IDs |
|
|
24
52
|
| Uploads | Buffered multipart helpers and production multipart streaming |
|
|
25
|
-
| Storage | Local + S3-compatible
|
|
53
|
+
| Storage | Local + S3-compatible storage, streaming, list/copy/move, metadata, bulk delete and signed URLs |
|
|
26
54
|
| Caching | Response cache and revalidation primitives |
|
|
27
|
-
| Developer tools |
|
|
28
|
-
| Production | Standalone build, hardening gateway, graceful shutdown, trusted
|
|
55
|
+
| Developer tools | Generators, Doctor/Inspect v2, updater, route inspection and project metadata |
|
|
56
|
+
| Production | Standalone Node.js build, hardening gateway, graceful shutdown, trusted proxy controls and HTTP timeouts |
|
|
57
|
+
| Documentation | Markdown source + machine-readable docs-web/platform manifests |
|
|
29
58
|
|
|
30
59
|
## Requirements
|
|
31
60
|
|
|
32
|
-
- Node.js `24.11` or newer
|
|
61
|
+
- Node.js `24.11.0` or newer
|
|
33
62
|
- React `19`
|
|
34
63
|
- npm
|
|
35
64
|
|
|
36
|
-
Database
|
|
65
|
+
Database framework primitives currently target MySQL. `create-bcp-app` can also scaffold PostgreSQL, SQLite and MongoDB application helpers.
|
|
37
66
|
|
|
38
67
|
## Quick start
|
|
39
68
|
|
|
@@ -43,32 +72,24 @@ cd my-app
|
|
|
43
72
|
npm run dev
|
|
44
73
|
```
|
|
45
74
|
|
|
46
|
-
Generated projects normally
|
|
75
|
+
Generated projects normally keep one framework dependency key:
|
|
47
76
|
|
|
48
77
|
```json
|
|
49
78
|
{
|
|
50
79
|
"dependencies": {
|
|
51
80
|
"bcp": "npm:@chidchanun/bcp@latest"
|
|
52
|
-
},
|
|
53
|
-
"scripts": {
|
|
54
|
-
"dev": "bcp dev",
|
|
55
|
-
"build": "bcp build",
|
|
56
|
-
"start": "bcp start",
|
|
57
|
-
"routes": "bcp routes",
|
|
58
|
-
"update": "bcp update",
|
|
59
|
-
"typecheck": "tsc --noEmit"
|
|
60
81
|
}
|
|
61
82
|
}
|
|
62
83
|
```
|
|
63
84
|
|
|
64
|
-
|
|
85
|
+
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.
|
|
65
86
|
|
|
66
87
|
## Application model
|
|
67
88
|
|
|
68
89
|
```text
|
|
69
90
|
Browser
|
|
70
91
|
↓
|
|
71
|
-
|
|
92
|
+
Security / middleware / cache
|
|
72
93
|
↓
|
|
73
94
|
Route guard
|
|
74
95
|
↓
|
|
@@ -79,7 +100,7 @@ React SSR
|
|
|
79
100
|
Hydration / SPA navigation
|
|
80
101
|
```
|
|
81
102
|
|
|
82
|
-
|
|
103
|
+
Typical route structure:
|
|
83
104
|
|
|
84
105
|
```text
|
|
85
106
|
app/
|
|
@@ -97,42 +118,101 @@ app/
|
|
|
97
118
|
└─ route.ts
|
|
98
119
|
```
|
|
99
120
|
|
|
100
|
-
##
|
|
121
|
+
## Public entrypoints
|
|
101
122
|
|
|
102
|
-
|
|
123
|
+
The `0.2.0` platform contract recognizes these application entrypoints:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
bcp
|
|
127
|
+
bcp/island
|
|
128
|
+
bcp/cache
|
|
129
|
+
bcp/config
|
|
130
|
+
bcp/validation
|
|
131
|
+
bcp/error
|
|
132
|
+
bcp/database
|
|
133
|
+
bcp/auth
|
|
134
|
+
bcp/server
|
|
135
|
+
bcp/server-only
|
|
136
|
+
bcp/middleware
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Application code should use public entrypoints rather than importing internal framework files under `packages/`.
|
|
140
|
+
|
|
141
|
+
The authoritative machine-readable list is in [docs/platform-manifest.json](docs/platform-manifest.json).
|
|
142
|
+
|
|
143
|
+
## CLI
|
|
144
|
+
|
|
145
|
+
Core commands:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
bcp dev
|
|
149
|
+
bcp build
|
|
150
|
+
bcp start
|
|
151
|
+
bcp routes
|
|
152
|
+
bcp update
|
|
153
|
+
bcp doctor
|
|
154
|
+
bcp inspect
|
|
155
|
+
bcp version
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Database migrations:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
bcp db create create_users
|
|
162
|
+
bcp db migrate
|
|
163
|
+
bcp db status
|
|
164
|
+
bcp db rollback
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Project generators:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
bcp generate page dashboard/users
|
|
171
|
+
bcp generate api users
|
|
172
|
+
bcp generate middleware
|
|
173
|
+
bcp generate migration create_users
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Page/API/middleware generators require `--force` before replacing an existing scaffold target.
|
|
177
|
+
|
|
178
|
+
On Windows, Microsoft SQL Server may provide another `bcp.exe`. For direct PowerShell usage prefer the collision-free project-local alias:
|
|
179
|
+
|
|
180
|
+
```powershell
|
|
181
|
+
npm exec -- bcp-framework doctor
|
|
182
|
+
npm exec -- bcp-framework inspect
|
|
183
|
+
npm exec -- bcp-framework routes
|
|
184
|
+
npm exec -- bcp-framework generate page dashboard/users
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Inside npm scripts, `bcp` remains safe because npm prepends the project `node_modules/.bin` directory to `PATH`.
|
|
188
|
+
|
|
189
|
+
## Routing, loaders, guards and actions
|
|
190
|
+
|
|
191
|
+
BCP discovers pages from `app/**/page.tsx` and API handlers from `app/**/route.ts`.
|
|
103
192
|
|
|
104
193
|
```text
|
|
105
194
|
app/page.tsx /
|
|
106
|
-
app/about/page.tsx /about
|
|
107
195
|
app/users/[id]/page.tsx /users/:id
|
|
108
196
|
app/docs/[...slug]/page.tsx /docs/*
|
|
109
197
|
app/catalog/[[...slug]]/page.tsx /catalog and /catalog/*
|
|
110
198
|
app/(admin)/settings/page.tsx /settings
|
|
111
|
-
|
|
112
199
|
app/api/users/route.ts /api/users
|
|
113
|
-
app/api/users/[id]/route.ts /api/users/:id
|
|
114
200
|
```
|
|
115
201
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
## Server data, guards and actions
|
|
119
|
-
|
|
120
|
-
Server loaders live next to their route in `loader.ts`. Route authorization can be defined in `guard.ts`, while route-owned mutations live in `actions.ts`.
|
|
121
|
-
|
|
122
|
-
```ts
|
|
123
|
-
import {
|
|
124
|
-
requireRole,
|
|
125
|
-
} from "bcp/auth";
|
|
202
|
+
Route-owned server features stay colocated:
|
|
126
203
|
|
|
127
|
-
|
|
128
|
-
|
|
204
|
+
```text
|
|
205
|
+
page.tsx
|
|
206
|
+
loader.ts
|
|
207
|
+
guard.ts
|
|
208
|
+
actions.ts
|
|
129
209
|
```
|
|
130
210
|
|
|
131
|
-
|
|
211
|
+
Guides:
|
|
132
212
|
|
|
213
|
+
- [Routing](docs/routing.md)
|
|
133
214
|
- [Server Data Loaders](docs/server-data-loaders.md)
|
|
134
215
|
- [Route Guards](docs/route-guards.md)
|
|
135
|
-
- [Auth Route Guards](docs/auth-route-guards.md)
|
|
136
216
|
- [Form Actions](docs/form-actions.md)
|
|
137
217
|
|
|
138
218
|
## Authentication and server APIs
|
|
@@ -153,9 +233,7 @@ import {
|
|
|
153
233
|
} from "bcp/server";
|
|
154
234
|
```
|
|
155
235
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
Read more:
|
|
236
|
+
Guides:
|
|
159
237
|
|
|
160
238
|
- [Authentication](docs/authentication.md)
|
|
161
239
|
- [JWT Sessions](docs/session-auth.md)
|
|
@@ -169,180 +247,76 @@ import {
|
|
|
169
247
|
} from "bcp/database";
|
|
170
248
|
```
|
|
171
249
|
|
|
172
|
-
|
|
250
|
+
BCP's database layer includes lazy MySQL pool creation, query/execute helpers, transactions and migrations.
|
|
173
251
|
|
|
174
|
-
|
|
175
|
-
bcp db create create_users
|
|
176
|
-
bcp db migrate
|
|
177
|
-
bcp db status
|
|
178
|
-
bcp db rollback
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Read more:
|
|
252
|
+
Guides:
|
|
182
253
|
|
|
183
254
|
- [Database](docs/database.md)
|
|
184
255
|
- [Database Migrations](docs/database-migrations.md)
|
|
185
256
|
|
|
186
|
-
##
|
|
257
|
+
## Storage and uploads
|
|
187
258
|
|
|
188
|
-
|
|
259
|
+
`create-bcp-app` can scaffold:
|
|
189
260
|
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const stored =
|
|
196
|
-
await storeMultipartFile(
|
|
197
|
-
request,
|
|
198
|
-
{
|
|
199
|
-
storage,
|
|
200
|
-
fieldName: "file",
|
|
201
|
-
key: "documents/report.pdf",
|
|
202
|
-
maxBytes: 100 * 1024 * 1024,
|
|
203
|
-
constraints: {
|
|
204
|
-
maxBytes: 80 * 1024 * 1024,
|
|
205
|
-
allowedTypes: [
|
|
206
|
-
"application/pdf",
|
|
207
|
-
],
|
|
208
|
-
},
|
|
209
|
-
}
|
|
210
|
-
);
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
`storeMultipartFile()` consumes `Request.body` incrementally and streams the selected file directly into storage. Request/body infrastructure limits still apply.
|
|
214
|
-
|
|
215
|
-
Read more: [File Upload](docs/file-upload.md)
|
|
216
|
-
|
|
217
|
-
## Storage
|
|
218
|
-
|
|
219
|
-
### Local filesystem
|
|
220
|
-
|
|
221
|
-
```ts
|
|
222
|
-
import {
|
|
223
|
-
createLocalStorage,
|
|
224
|
-
} from "bcp/server";
|
|
225
|
-
|
|
226
|
-
const storage =
|
|
227
|
-
createLocalStorage({
|
|
228
|
-
directory: "./uploads",
|
|
229
|
-
});
|
|
261
|
+
```text
|
|
262
|
+
None
|
|
263
|
+
Local Server
|
|
264
|
+
Amazon S3
|
|
265
|
+
Cloudflare R2
|
|
230
266
|
```
|
|
231
267
|
|
|
232
|
-
|
|
268
|
+
BCP's storage API supports local and S3-compatible storage, streaming reads/writes, ranges, object listing, copy/move, portable metadata, bulk deletion and S3 signed URLs.
|
|
233
269
|
|
|
234
|
-
|
|
270
|
+
Local Server projects keep a visible scaffold:
|
|
235
271
|
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const storage =
|
|
242
|
-
createS3Storage({
|
|
243
|
-
bucket: process.env.S3_BUCKET!,
|
|
244
|
-
region: process.env.S3_REGION!,
|
|
245
|
-
endpoint: process.env.S3_ENDPOINT,
|
|
246
|
-
accessKeyId: process.env.S3_ACCESS_KEY_ID,
|
|
247
|
-
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
|
|
248
|
-
});
|
|
272
|
+
```text
|
|
273
|
+
storage/
|
|
274
|
+
├─ .gitkeep
|
|
275
|
+
└─ README.md
|
|
249
276
|
```
|
|
250
277
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
Read more: [S3-Compatible Storage](docs/s3-storage.md)
|
|
278
|
+
Runtime objects remain ignored by Git.
|
|
254
279
|
|
|
255
|
-
|
|
280
|
+
Guides:
|
|
256
281
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
getStorageCapabilities,
|
|
262
|
-
putStorageStream,
|
|
263
|
-
readStorageStream,
|
|
264
|
-
} from "bcp/server";
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
Both built-in local and S3 adapters support streaming reads/writes and byte ranges.
|
|
268
|
-
|
|
269
|
-
Read more: [Storage and File Delivery](docs/storage.md)
|
|
282
|
+
- [File Upload](docs/file-upload.md)
|
|
283
|
+
- [Storage & File Delivery](docs/storage.md)
|
|
284
|
+
- [Storage Ecosystem](docs/storage-ecosystem.md)
|
|
285
|
+
- [S3-Compatible Storage](docs/s3-storage.md)
|
|
270
286
|
|
|
271
|
-
|
|
287
|
+
## Production build
|
|
272
288
|
|
|
273
|
-
|
|
289
|
+
Build:
|
|
274
290
|
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
copyStorageObject,
|
|
278
|
-
createStorageSignedReadUrl,
|
|
279
|
-
createStorageSignedWriteUrl,
|
|
280
|
-
deleteStorageObjects,
|
|
281
|
-
getStorageEcosystemCapabilities,
|
|
282
|
-
getStorageMetadata,
|
|
283
|
-
listStorageObjects,
|
|
284
|
-
moveStorageObject,
|
|
285
|
-
setStorageMetadata,
|
|
286
|
-
} from "bcp/server";
|
|
291
|
+
```bash
|
|
292
|
+
npm run build
|
|
287
293
|
```
|
|
288
294
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
S3-compatible storage also supports short-lived presigned direct-transfer URLs. Local storage intentionally does not emulate signed URLs.
|
|
292
|
-
|
|
293
|
-
Read more: [Storage Ecosystem](docs/storage-ecosystem.md)
|
|
294
|
-
|
|
295
|
-
## File delivery
|
|
296
|
-
|
|
297
|
-
`createStorageResponse()` serves local or cloud-backed objects through the same API with `GET`, `HEAD`, ETag/Last-Modified validators and single byte ranges.
|
|
295
|
+
Output:
|
|
298
296
|
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
request,
|
|
306
|
-
storage,
|
|
307
|
-
"documents/report.pdf"
|
|
308
|
-
);
|
|
297
|
+
```text
|
|
298
|
+
.bcp-framework/build/
|
|
299
|
+
├─ client/
|
|
300
|
+
├─ public/
|
|
301
|
+
└─ server/
|
|
302
|
+
└─ server.mjs
|
|
309
303
|
```
|
|
310
304
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
## Middleware, validation, errors and caching
|
|
314
|
-
|
|
315
|
-
BCP includes Middleware System v2, typed validation helpers, structured HTTP errors, structured logging and response caching/revalidation.
|
|
316
|
-
|
|
317
|
-
Read more:
|
|
318
|
-
|
|
319
|
-
- [Middleware](docs/middleware.md)
|
|
320
|
-
- [Validation](docs/validation.md)
|
|
321
|
-
- [Error Handling](docs/error-handling.md)
|
|
322
|
-
- [Logging and Observability](docs/development-logging.md)
|
|
323
|
-
- [Caching](docs/caching.md)
|
|
324
|
-
- [Security](docs/security.md)
|
|
325
|
-
|
|
326
|
-
## Production build
|
|
305
|
+
Run:
|
|
327
306
|
|
|
328
307
|
```bash
|
|
329
|
-
npm run build
|
|
330
308
|
npm run start
|
|
331
309
|
```
|
|
332
310
|
|
|
333
|
-
|
|
311
|
+
The `0.2.0` platform build target is explicitly:
|
|
334
312
|
|
|
335
313
|
```text
|
|
336
|
-
|
|
337
|
-
├─ client/
|
|
338
|
-
├─ public/
|
|
339
|
-
└─ server/
|
|
340
|
-
└─ server.mjs
|
|
314
|
+
standalone-node
|
|
341
315
|
```
|
|
342
316
|
|
|
343
|
-
|
|
317
|
+
Native `.exe`, desktop and mobile compilation are not part of the `0.2.0` platform contract.
|
|
344
318
|
|
|
345
|
-
|
|
319
|
+
Production hardening supports:
|
|
346
320
|
|
|
347
321
|
```dotenv
|
|
348
322
|
BCP_REQUEST_TIMEOUT_MS=120000
|
|
@@ -352,99 +326,93 @@ BCP_SHUTDOWN_TIMEOUT_MS=10000
|
|
|
352
326
|
BCP_TRUST_PROXY=false
|
|
353
327
|
```
|
|
354
328
|
|
|
355
|
-
|
|
329
|
+
Enable trusted proxy mode only when untrusted clients cannot bypass the trusted reverse proxy/load balancer.
|
|
356
330
|
|
|
357
|
-
|
|
358
|
-
import {
|
|
359
|
-
registerShutdownHook,
|
|
360
|
-
} from "bcp/server";
|
|
331
|
+
Read more: [Production Hardening](docs/production-hardening.md)
|
|
361
332
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
);
|
|
333
|
+
## Doctor / Inspect / project metadata
|
|
334
|
+
|
|
335
|
+
Project diagnostics:
|
|
336
|
+
|
|
337
|
+
```powershell
|
|
338
|
+
npm exec -- bcp-framework doctor
|
|
339
|
+
npm exec -- bcp-framework inspect --json
|
|
370
340
|
```
|
|
371
341
|
|
|
372
|
-
|
|
342
|
+
Doctor/Inspect v2 can report lockfile/package-manager state, duplicate framework declarations, standalone build presence, Docker/project diagnostics, storage provider and production-hardening configuration.
|
|
373
343
|
|
|
374
|
-
|
|
344
|
+
Projects created by recent `create-bcp-app` versions include non-secret scaffold metadata:
|
|
345
|
+
|
|
346
|
+
```text
|
|
347
|
+
bcp.project.json
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Credentials, database passwords, access keys, JWT/session secrets and tokens must never be stored in that file.
|
|
375
351
|
|
|
376
|
-
|
|
352
|
+
Guides:
|
|
377
353
|
|
|
378
|
-
|
|
354
|
+
- [Developer Tools](docs/developer-tools.md)
|
|
355
|
+
- [Project Metadata](docs/project-metadata.md)
|
|
356
|
+
|
|
357
|
+
## Updating from 0.1.x
|
|
379
358
|
|
|
380
|
-
|
|
359
|
+
`0.2.0` does not intentionally remove public entrypoints from the `0.1.29` baseline.
|
|
381
360
|
|
|
382
|
-
|
|
361
|
+
Recommended upgrade flow after publication:
|
|
383
362
|
|
|
384
363
|
```powershell
|
|
385
|
-
npm exec -- bcp-framework --version
|
|
386
364
|
npm exec -- bcp-framework doctor
|
|
387
|
-
npm exec -- bcp-framework
|
|
388
|
-
npm exec -- bcp-framework
|
|
389
|
-
npm
|
|
390
|
-
npm
|
|
365
|
+
npm exec -- bcp-framework update --check
|
|
366
|
+
npm exec -- bcp-framework update 0.2.0
|
|
367
|
+
npm run typecheck
|
|
368
|
+
npm run build
|
|
391
369
|
```
|
|
392
370
|
|
|
393
|
-
|
|
371
|
+
Do not reuse a standalone `.bcp-framework/build` produced by an older framework version; rebuild after upgrading.
|
|
394
372
|
|
|
395
|
-
|
|
373
|
+
Read more: [Migrating to 0.2.0](docs/migration-0.2.md)
|
|
396
374
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
bcp
|
|
402
|
-
|
|
375
|
+
## Documentation source and bcp-docs-web
|
|
376
|
+
|
|
377
|
+
The framework repository is the documentation source of truth.
|
|
378
|
+
|
|
379
|
+
`bcp-docs-web` should consume:
|
|
380
|
+
|
|
381
|
+
```text
|
|
382
|
+
docs/docs-web-manifest.json
|
|
383
|
+
-> navigation, routes, Markdown sources and release routes
|
|
384
|
+
|
|
385
|
+
docs/platform-manifest.json
|
|
386
|
+
-> version, runtime target, public entrypoints and capabilities
|
|
403
387
|
```
|
|
404
388
|
|
|
405
|
-
|
|
389
|
+
Markdown under `docs/` remains the authored content source.
|
|
406
390
|
|
|
407
|
-
|
|
391
|
+
Start here:
|
|
392
|
+
|
|
393
|
+
- [Documentation Source Map](docs/README.md)
|
|
394
|
+
- [Docs-Web Manifest](docs/docs-web-manifest.json)
|
|
395
|
+
- [Platform Manifest](docs/platform-manifest.json)
|
|
396
|
+
- [Framework Platform Contract](docs/platform-contract.md)
|
|
397
|
+
- [Migration Guide](docs/migration-0.2.md)
|
|
398
|
+
|
|
399
|
+
## Release validation
|
|
400
|
+
|
|
401
|
+
Framework releases must pass:
|
|
408
402
|
|
|
409
403
|
```bash
|
|
410
404
|
npm install
|
|
411
405
|
npm run typecheck
|
|
412
406
|
npm run test:unit
|
|
413
407
|
npm run test:integration
|
|
414
|
-
npm run test:e2e
|
|
415
408
|
npm run test:package
|
|
409
|
+
npm run test:e2e
|
|
416
410
|
npm run rc:check
|
|
417
411
|
```
|
|
418
412
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
Read more: [Releasing](docs/releasing.md)
|
|
413
|
+
`0.2.0` adds a platform-contract package smoke check that verifies the prepared npm artifact's public exports, executable aliases, Node baseline, docs metadata and framework/create-app version parity.
|
|
422
414
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
The `docs/` directory is the authored source for **`bcp-docs-web`**.
|
|
426
|
-
|
|
427
|
-
Recommended starting points:
|
|
428
|
-
|
|
429
|
-
- [Documentation Source Map](docs/README.md)
|
|
430
|
-
- [Getting Started](docs/getting-started.md)
|
|
431
|
-
- [Configuration](docs/configuration.md)
|
|
432
|
-
- [Routing](docs/routing.md)
|
|
433
|
-
- [Server Data Loaders](docs/server-data-loaders.md)
|
|
434
|
-
- [Route Guards](docs/route-guards.md)
|
|
435
|
-
- [Form Actions](docs/form-actions.md)
|
|
436
|
-
- [Server Request APIs](docs/server-request-apis.md)
|
|
437
|
-
- [File Upload](docs/file-upload.md)
|
|
438
|
-
- [Storage and File Delivery](docs/storage.md)
|
|
439
|
-
- [Storage Ecosystem](docs/storage-ecosystem.md)
|
|
440
|
-
- [S3-Compatible Storage](docs/s3-storage.md)
|
|
441
|
-
- [Production Hardening](docs/production-hardening.md)
|
|
442
|
-
- [Authentication](docs/authentication.md)
|
|
443
|
-
- [Database](docs/database.md)
|
|
444
|
-
- [Middleware](docs/middleware.md)
|
|
445
|
-
- [Developer Tools](docs/developer-tools.md)
|
|
446
|
-
- [Deployment](docs/deployment.md)
|
|
447
|
-
- [Releasing](docs/releasing.md)
|
|
415
|
+
Do not tag or publish a release until the final release commit passes the complete RC sequence.
|
|
448
416
|
|
|
449
417
|
## Release history
|
|
450
418
|
|
|
@@ -459,18 +427,14 @@ Recommended starting points:
|
|
|
459
427
|
| `0.1.26` | S3-Compatible Storage and Production Streaming |
|
|
460
428
|
| `0.1.27` | Storage Ecosystem |
|
|
461
429
|
| `0.1.28` | Production Hardening |
|
|
430
|
+
| `0.1.29` | Developer Experience |
|
|
431
|
+
| `0.2.0` | Framework Platform baseline |
|
|
462
432
|
|
|
463
433
|
## Next direction
|
|
464
434
|
|
|
465
|
-
After `0.
|
|
466
|
-
|
|
467
|
-
1. route/API/middleware/migration generators,
|
|
468
|
-
2. richer `doctor` and `inspect` diagnostics,
|
|
469
|
-
3. clearer build/runtime error messages,
|
|
470
|
-
4. improved create-app presets and automation flags,
|
|
471
|
-
5. production configuration diagnostics.
|
|
435
|
+
After the `0.2.0` platform baseline is validated and released, later `0.2.x` work can add broader build/deployment targets and higher-level platform features without changing the existing standalone Node.js contract by accident.
|
|
472
436
|
|
|
473
|
-
|
|
437
|
+
Native executable/desktop/mobile packaging remains future roadmap work, not a `0.2.0` guarantee.
|
|
474
438
|
|
|
475
439
|
## License
|
|
476
440
|
|