@c9up/ream 0.2.17 → 0.2.19
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 +4 -0
- package/dist/Application.d.ts +15 -0
- package/dist/Application.d.ts.map +1 -1
- package/dist/Application.js +15 -0
- package/dist/Application.js.map +1 -1
- package/dist/HttpKernel.d.ts +10 -0
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +61 -5
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +65 -15
- package/dist/Ignitor.js.map +1 -1
- package/dist/Provider.d.ts +15 -0
- package/dist/Provider.d.ts.map +1 -1
- package/dist/Provider.js.map +1 -1
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +174 -45
- package/dist/container/Container.js.map +1 -1
- package/dist/container/types.d.ts +7 -0
- package/dist/container/types.d.ts.map +1 -1
- package/dist/dev/hmr.d.ts +37 -0
- package/dist/dev/hmr.d.ts.map +1 -0
- package/dist/dev/hmr.js +72 -0
- package/dist/dev/hmr.js.map +1 -0
- package/dist/graphql/GraphQLProvider.d.ts +14 -3
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
- package/dist/graphql/GraphQLProvider.js +14 -3
- package/dist/graphql/GraphQLProvider.js.map +1 -1
- package/dist/hot.d.ts +29 -0
- package/dist/hot.d.ts.map +1 -0
- package/dist/hot.js +135 -0
- package/dist/hot.js.map +1 -0
- package/dist/http/Exception.d.ts +2 -2
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +3 -3
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/Request.d.ts +24 -3
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +40 -0
- package/dist/http/Request.js.map +1 -1
- package/dist/http/RequestValidator.d.ts +80 -0
- package/dist/http/RequestValidator.d.ts.map +1 -0
- package/dist/http/RequestValidator.js +93 -0
- package/dist/http/RequestValidator.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.d.ts +2 -2
- package/dist/middleware/Pipeline.js +2 -2
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/migrations/MigrationRegistry.d.ts +16 -0
- package/dist/migrations/MigrationRegistry.d.ts.map +1 -1
- package/dist/migrations/MigrationRegistry.js +24 -0
- package/dist/migrations/MigrationRegistry.js.map +1 -1
- package/dist/openapi/OpenApiGenerator.d.ts +16 -0
- package/dist/openapi/OpenApiGenerator.d.ts.map +1 -1
- package/dist/openapi/OpenApiGenerator.js +76 -4
- package/dist/openapi/OpenApiGenerator.js.map +1 -1
- package/dist/openapi/OpenApiProvider.d.ts +16 -5
- package/dist/openapi/OpenApiProvider.d.ts.map +1 -1
- package/dist/openapi/OpenApiProvider.js +21 -6
- package/dist/openapi/OpenApiProvider.js.map +1 -1
- package/dist/router/Router.d.ts +1 -1
- package/dist/router/Router.js +1 -1
- package/dist/rpc/RpcProvider.d.ts +13 -2
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +13 -2
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/security/CookieSigner.d.ts +3 -2
- package/dist/security/CookieSigner.d.ts.map +1 -1
- package/dist/security/CookieSigner.js +3 -2
- package/dist/security/CookieSigner.js.map +1 -1
- package/dist/storage/StaticMiddleware.d.ts +75 -7
- package/dist/storage/StaticMiddleware.d.ts.map +1 -1
- package/dist/storage/StaticMiddleware.js +257 -85
- package/dist/storage/StaticMiddleware.js.map +1 -1
- package/dist/storage/StaticProvider.d.ts +12 -2
- package/dist/storage/StaticProvider.d.ts.map +1 -1
- package/dist/storage/StaticProvider.js +24 -5
- package/dist/storage/StaticProvider.js.map +1 -1
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +20 -8
- package/scheduler.win32-x64-msvc.node +0 -0
- package/scripts/copy-napi.mjs +11 -3
- package/src/Application.ts +15 -0
- package/src/HttpKernel.ts +87 -5
- package/src/Ignitor.ts +70 -16
- package/src/Provider.ts +15 -0
- package/src/container/Container.ts +178 -48
- package/src/container/types.ts +11 -0
- package/src/dev/hmr.ts +83 -0
- package/src/graphql/GraphQLProvider.ts +14 -3
- package/src/hot.ts +165 -0
- package/src/http/Exception.ts +4 -4
- package/src/http/Request.ts +67 -3
- package/src/http/RequestValidator.ts +143 -0
- package/src/index.ts +10 -3
- package/src/middleware/Pipeline.ts +4 -4
- package/src/migrations/MigrationRegistry.ts +23 -0
- package/src/openapi/OpenApiGenerator.ts +84 -4
- package/src/openapi/OpenApiProvider.ts +21 -6
- package/src/router/Router.ts +1 -1
- package/src/rpc/RpcProvider.ts +13 -2
- package/src/security/CookieSigner.ts +3 -2
- package/src/storage/StaticMiddleware.ts +338 -97
- package/src/storage/StaticProvider.ts +26 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenApiGenerator.d.ts","sourceRoot":"","sources":["../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAmB,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC;AAMD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACjC,CAAA;IACD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,UAAU,EAAE;QACV,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACjC,CAAA;CACF,CAAA;AAaD,qBAAa,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"OpenApiGenerator.d.ts","sourceRoot":"","sources":["../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAmB,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC;AAMD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACjC,CAAA;IACD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,UAAU,EAAE;QACV,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACjC,CAAA;CACF,CAAA;AAaD,qBAAa,gBAAgB;;gBAgBzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAOpD,qEAAqE;IACrE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIvE;;;;;;;;;;;;;;OAcG;IACG,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASjF,8CAA8C;IAC9C,QAAQ,IAAI,WAAW;CA+LxB"}
|
|
@@ -22,6 +22,16 @@ export class OpenApiGenerator {
|
|
|
22
22
|
#router;
|
|
23
23
|
#config;
|
|
24
24
|
#runeSchemas;
|
|
25
|
+
/**
|
|
26
|
+
* Schemas a validator produced itself, already in JSON Schema form.
|
|
27
|
+
*
|
|
28
|
+
* Kept apart from {@link #runeSchemas}, which holds rune FIELD MAPS that
|
|
29
|
+
* {@link #runeToJsonSchema} still has to convert. One map for both would
|
|
30
|
+
* mean guessing which kind a value is, and guessing wrong sends a finished
|
|
31
|
+
* schema back through the converter, which reads its `type` and `properties`
|
|
32
|
+
* keys as if they were field names.
|
|
33
|
+
*/
|
|
34
|
+
#jsonSchemas = new Map();
|
|
25
35
|
constructor(router, config, runeSchemas) {
|
|
26
36
|
this.#router = router;
|
|
27
37
|
this.#config = config;
|
|
@@ -31,6 +41,31 @@ export class OpenApiGenerator {
|
|
|
31
41
|
registerSchema(name, definition) {
|
|
32
42
|
this.#runeSchemas.set(name, definition);
|
|
33
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Fill the schema map from the validators the routes already name.
|
|
46
|
+
*
|
|
47
|
+
* `route.validate('createUser')` records a container token, and the
|
|
48
|
+
* validator behind it can describe itself. Without this step every one of
|
|
49
|
+
* those routes documented its body as a bare `{ type: 'object' }` unless the
|
|
50
|
+
* app ALSO called `registerSchema` by hand with a definition it had to keep
|
|
51
|
+
* in step with the schema — two descriptions of one payload, and nothing
|
|
52
|
+
* checking they agreed.
|
|
53
|
+
*
|
|
54
|
+
* Resolution happens once, here, because `generate()` is synchronous and the
|
|
55
|
+
* container is not. A validator that cannot be resolved, or that cannot
|
|
56
|
+
* describe itself, is skipped: a missing section of documentation is a
|
|
57
|
+
* smaller problem than a boot that fails over one.
|
|
58
|
+
*/
|
|
59
|
+
async hydrateSchemas(resolve) {
|
|
60
|
+
const names = new Set(this.#getRoutes().flatMap((route) => route.validators));
|
|
61
|
+
for (const name of names) {
|
|
62
|
+
if (this.#runeSchemas.has(name) || this.#jsonSchemas.has(name))
|
|
63
|
+
continue;
|
|
64
|
+
const definition = await describeValidator(resolve, name);
|
|
65
|
+
if (definition !== undefined)
|
|
66
|
+
this.#jsonSchemas.set(name, definition);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
34
69
|
/** Generate the complete OpenAPI 3.1 spec. */
|
|
35
70
|
generate() {
|
|
36
71
|
const spec = {
|
|
@@ -109,13 +144,13 @@ export class OpenApiGenerator {
|
|
|
109
144
|
}
|
|
110
145
|
if (route.validators.length > 0 && ['post', 'put', 'patch'].includes(method)) {
|
|
111
146
|
const [validatorName] = route.validators;
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
147
|
+
const body = validatorName === undefined ? undefined : this.#bodySchema(validatorName);
|
|
148
|
+
if (body && validatorName !== undefined) {
|
|
114
149
|
operation.requestBody = {
|
|
115
150
|
required: true,
|
|
116
|
-
content: { 'application/json': { schema:
|
|
151
|
+
content: { 'application/json': { schema: body } },
|
|
117
152
|
};
|
|
118
|
-
schemas[validatorName] =
|
|
153
|
+
schemas[validatorName] = body;
|
|
119
154
|
}
|
|
120
155
|
else {
|
|
121
156
|
operation.requestBody = {
|
|
@@ -146,6 +181,17 @@ export class OpenApiGenerator {
|
|
|
146
181
|
return route.name;
|
|
147
182
|
return `${route.method} ${route.path}`;
|
|
148
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* The JSON Schema for a named validator: what it described about itself
|
|
186
|
+
* first, then a hand-registered field map converted here.
|
|
187
|
+
*/
|
|
188
|
+
#bodySchema(name) {
|
|
189
|
+
const described = this.#jsonSchemas.get(name);
|
|
190
|
+
if (described !== undefined)
|
|
191
|
+
return described;
|
|
192
|
+
const fields = this.#runeSchemas.get(name);
|
|
193
|
+
return fields === undefined ? undefined : this.#runeToJsonSchema(fields);
|
|
194
|
+
}
|
|
149
195
|
/** Convert a Rune schema (Record<string, RuleChain>) to JSON Schema. */
|
|
150
196
|
#runeToJsonSchema(schema) {
|
|
151
197
|
const properties = {};
|
|
@@ -191,4 +237,30 @@ export class OpenApiGenerator {
|
|
|
191
237
|
return this.#router.getRoutes();
|
|
192
238
|
}
|
|
193
239
|
}
|
|
240
|
+
function describesItself(value) {
|
|
241
|
+
return (typeof value === 'object' &&
|
|
242
|
+
value !== null &&
|
|
243
|
+
'toJSONSchema' in value &&
|
|
244
|
+
typeof value.toJSONSchema === 'function');
|
|
245
|
+
}
|
|
246
|
+
/** Resolve one validator and ask it for its schema, or answer undefined. */
|
|
247
|
+
async function describeValidator(resolve, name) {
|
|
248
|
+
let validator;
|
|
249
|
+
try {
|
|
250
|
+
validator = await resolve(`validator:${name}`);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// An unregistered validator is already a hard error at request time; the
|
|
254
|
+
// documentation is not the place to raise it a second time.
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
if (!describesItself(validator))
|
|
258
|
+
return undefined;
|
|
259
|
+
try {
|
|
260
|
+
return validator.toJSONSchema();
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
194
266
|
//# sourceMappingURL=OpenApiGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenApiGenerator.js","sourceRoot":"","sources":["../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,8DAA8D;AAC9D,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChE,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAC5D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,OAAO,gBAAgB;IAC3B,OAAO,CAAQ;IACf,OAAO,CAAe;IACtB,YAAY,CAAsC;
|
|
1
|
+
{"version":3,"file":"OpenApiGenerator.js","sourceRoot":"","sources":["../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `OpenApiProvider` — serves an auto-generated OpenAPI 3.1 spec + Swagger UI.
|
|
3
3
|
*
|
|
4
|
-
* `
|
|
4
|
+
* `start()` mounts a global middleware that, on the first GET to `/api-docs`
|
|
5
5
|
* (JSON) or `/docs` (Swagger UI), lazily generates the spec from the router's
|
|
6
|
-
* registered routes — so every route registered
|
|
7
|
-
* (the spec must NOT be generated eagerly
|
|
8
|
-
* registered their routes). Opt-out via
|
|
6
|
+
* registered routes — so every route registered while the application starts
|
|
7
|
+
* up is included (the spec must NOT be generated eagerly, before the other
|
|
8
|
+
* providers and the preloads have registered their routes). Opt-out via
|
|
9
|
+
* `config.openapi.enabled = false`.
|
|
9
10
|
*
|
|
10
11
|
* @implements Story 24.4
|
|
11
12
|
*/
|
|
@@ -31,7 +32,17 @@ export interface OpenApiProviderOptions {
|
|
|
31
32
|
export declare class OpenApiProvider extends Provider {
|
|
32
33
|
#private;
|
|
33
34
|
constructor(app: AppContext, options?: OpenApiProviderOptions);
|
|
34
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Routes and server middleware go in `start`, not `boot`.
|
|
37
|
+
*
|
|
38
|
+
* Upstream documents that phase for exactly this, and the order is what makes
|
|
39
|
+
* it matter: providers boot, then providers START, then the preloads run —
|
|
40
|
+
* and the preloads are where an application writes its own routes and kernel.
|
|
41
|
+
* Mounted in `boot`, a framework route landed ahead of every application
|
|
42
|
+
* route, so an overlapping path was answered by the framework rather than by
|
|
43
|
+
* the app that meant to override it.
|
|
44
|
+
*/
|
|
45
|
+
start(): Promise<void>;
|
|
35
46
|
}
|
|
36
47
|
export default OpenApiProvider;
|
|
37
48
|
//# sourceMappingURL=OpenApiProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenApiProvider.d.ts","sourceRoot":"","sources":["../../src/openapi/OpenApiProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"OpenApiProvider.d.ts","sourceRoot":"","sources":["../../src/openapi/OpenApiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;;gBAG/B,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,sBAA2B;IAKjE;;;;;;;;;OASG;IACY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBtC;AAGD,eAAe,eAAe,CAAA"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `OpenApiProvider` — serves an auto-generated OpenAPI 3.1 spec + Swagger UI.
|
|
3
3
|
*
|
|
4
|
-
* `
|
|
4
|
+
* `start()` mounts a global middleware that, on the first GET to `/api-docs`
|
|
5
5
|
* (JSON) or `/docs` (Swagger UI), lazily generates the spec from the router's
|
|
6
|
-
* registered routes — so every route registered
|
|
7
|
-
* (the spec must NOT be generated eagerly
|
|
8
|
-
* registered their routes). Opt-out via
|
|
6
|
+
* registered routes — so every route registered while the application starts
|
|
7
|
+
* up is included (the spec must NOT be generated eagerly, before the other
|
|
8
|
+
* providers and the preloads have registered their routes). Opt-out via
|
|
9
|
+
* `config.openapi.enabled = false`.
|
|
9
10
|
*
|
|
10
11
|
* @implements Story 24.4
|
|
11
12
|
*/
|
|
@@ -18,7 +19,17 @@ export class OpenApiProvider extends Provider {
|
|
|
18
19
|
super(app);
|
|
19
20
|
this.#override = options.generator;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Routes and server middleware go in `start`, not `boot`.
|
|
24
|
+
*
|
|
25
|
+
* Upstream documents that phase for exactly this, and the order is what makes
|
|
26
|
+
* it matter: providers boot, then providers START, then the preloads run —
|
|
27
|
+
* and the preloads are where an application writes its own routes and kernel.
|
|
28
|
+
* Mounted in `boot`, a framework route landed ahead of every application
|
|
29
|
+
* route, so an overlapping path was answered by the framework rather than by
|
|
30
|
+
* the app that meant to override it.
|
|
31
|
+
*/
|
|
32
|
+
async start() {
|
|
22
33
|
const config = this.app.config.get('openapi') ?? {};
|
|
23
34
|
if (config.enabled === false)
|
|
24
35
|
return;
|
|
@@ -33,10 +44,14 @@ export class OpenApiProvider extends Provider {
|
|
|
33
44
|
}
|
|
34
45
|
async #buildGenerator(config) {
|
|
35
46
|
const router = await this.app.container.make('router');
|
|
36
|
-
|
|
47
|
+
const generator = new OpenApiGenerator(router, {
|
|
37
48
|
title: config.title ?? 'API',
|
|
38
49
|
version: config.version ?? '1.0.0',
|
|
39
50
|
});
|
|
51
|
+
// The routes already name their validators; ask each one to describe
|
|
52
|
+
// itself instead of making the app repeat the shape by hand.
|
|
53
|
+
await generator.hydrateSchemas((token) => this.app.container.make(token));
|
|
54
|
+
return generator;
|
|
40
55
|
}
|
|
41
56
|
}
|
|
42
57
|
// Default export so reamrc's provider loader can `() => import('@c9up/ream/<feature>/provider')` (resolves to { default }), matching events/rpc. Named export above stays.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenApiProvider.js","sourceRoot":"","sources":["../../src/openapi/OpenApiProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"OpenApiProvider.js","sourceRoot":"","sources":["../../src/openapi/OpenApiProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAoB1D,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,SAAS,CAAmB;IAErC,YAAY,GAAe,EAAE,UAAkC,EAAE;QAC/D,KAAK,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACpC,CAAC;IAED;;;;;;;;;OASG;IACM,KAAK,CAAC,KAAK;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAoB,SAAS,CAAC,IAAI,EAAE,CAAA;QACtE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;YAAE,OAAM;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAA;QAC9D,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE;SACjC,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAyB;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE;YAC7C,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;YAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;SACnC,CAAC,CAAA;QACF,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAU,KAAK,CAAC,CAAC,CAAA;QAClF,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAED,2KAA2K;AAC3K,eAAe,eAAe,CAAA"}
|
package/dist/router/Router.d.ts
CHANGED
package/dist/router/Router.js
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* rpc.method('task.validate', handler).guard('jwt')
|
|
10
10
|
* rpc.namespace('user', UserController)
|
|
11
11
|
*
|
|
12
|
-
* - `
|
|
12
|
+
* - `start()` — mount `POST <config.rpc.path ?? '/rpc'>` on the core router,
|
|
13
13
|
* dispatching every request body (single or batch) to `RpcRouter.handle()`.
|
|
14
|
+
* In `start`, which is the phase upstream documents for routes.
|
|
14
15
|
*
|
|
15
16
|
* @implements Story 24.1, 24.2
|
|
16
17
|
*/
|
|
@@ -38,7 +39,17 @@ export declare class RpcProvider extends Provider {
|
|
|
38
39
|
readonly rpc: RpcRouter;
|
|
39
40
|
constructor(app: AppContext, options?: RpcProviderOptions);
|
|
40
41
|
register(): void;
|
|
41
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Routes and server middleware go in `start`, not `boot`.
|
|
44
|
+
*
|
|
45
|
+
* Upstream documents that phase for exactly this, and the order is what makes
|
|
46
|
+
* it matter: providers boot, then providers START, then the preloads run —
|
|
47
|
+
* and the preloads are where an application writes its own routes and kernel.
|
|
48
|
+
* Mounted in `boot`, a framework route landed ahead of every application
|
|
49
|
+
* route, so an overlapping path was answered by the framework rather than by
|
|
50
|
+
* the app that meant to override it.
|
|
51
|
+
*/
|
|
52
|
+
start(): Promise<void>;
|
|
42
53
|
}
|
|
43
54
|
export default RpcProvider;
|
|
44
55
|
//# sourceMappingURL=RpcProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcProvider.d.ts","sourceRoot":"","sources":["../../src/rpc/RpcProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"RpcProvider.d.ts","sourceRoot":"","sources":["../../src/rpc/RpcProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,qBAAa,WAAY,SAAQ,QAAQ;;IACvC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;gBAGX,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,kBAAuB;IAKpD,QAAQ,IAAI,IAAI;IAmBzB;;;;;;;;;OASG;IACY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAatC;AAMD,eAAe,WAAW,CAAA"}
|
package/dist/rpc/RpcProvider.js
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* rpc.method('task.validate', handler).guard('jwt')
|
|
10
10
|
* rpc.namespace('user', UserController)
|
|
11
11
|
*
|
|
12
|
-
* - `
|
|
12
|
+
* - `start()` — mount `POST <config.rpc.path ?? '/rpc'>` on the core router,
|
|
13
13
|
* dispatching every request body (single or batch) to `RpcRouter.handle()`.
|
|
14
|
+
* In `start`, which is the phase upstream documents for routes.
|
|
14
15
|
*
|
|
15
16
|
* @implements Story 24.1, 24.2
|
|
16
17
|
*/
|
|
@@ -39,7 +40,17 @@ export class RpcProvider extends Provider {
|
|
|
39
40
|
container.singleton('rpc', () => this.rpc);
|
|
40
41
|
this.#registered = true;
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Routes and server middleware go in `start`, not `boot`.
|
|
45
|
+
*
|
|
46
|
+
* Upstream documents that phase for exactly this, and the order is what makes
|
|
47
|
+
* it matter: providers boot, then providers START, then the preloads run —
|
|
48
|
+
* and the preloads are where an application writes its own routes and kernel.
|
|
49
|
+
* Mounted in `boot`, a framework route landed ahead of every application
|
|
50
|
+
* route, so an overlapping path was answered by the framework rather than by
|
|
51
|
+
* the app that meant to override it.
|
|
52
|
+
*/
|
|
53
|
+
async start() {
|
|
43
54
|
const config = this.app.config.get('rpc');
|
|
44
55
|
const path = config?.path ?? '/rpc';
|
|
45
56
|
const router = await this.app.container.make('router');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcProvider.js","sourceRoot":"","sources":["../../src/rpc/RpcProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"RpcProvider.js","sourceRoot":"","sources":["../../src/rpc/RpcProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAoB1C,MAAM,OAAO,WAAY,SAAQ,QAAQ;IAC9B,GAAG,CAAW;IACvB,WAAW,GAAG,KAAK,CAAA;IAEnB,YAAY,GAAe,EAAE,UAA8B,EAAE;QAC3D,KAAK,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,SAAS,EAAE,CAAA;IAC9C,CAAC;IAEQ,QAAQ;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,0DAA0D;YAC1D,8DAA8D;YAC9D,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAM;YAC5B,MAAM,IAAI,SAAS,CACjB,mCAAmC,EACnC,gEAAgE,EAChE;gBACE,IAAI,EAAE,kGAAkG;aACzG,CACF,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAChC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAED;;;;;;;;;OASG;IACM,KAAK,CAAC,KAAK;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAY,KAAK,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAA;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAA;QAC9D,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3E,sEAAsE;QACtE,wEAAwE;QACxE,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE,CAAA;QACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF;AAED,uEAAuE;AACvE,+EAA+E;AAC/E,gFAAgF;AAChF,4BAA4B;AAC5B,eAAe,WAAW,CAAA"}
|
|
@@ -44,8 +44,9 @@ export declare class CookieSigner {
|
|
|
44
44
|
/**
|
|
45
45
|
* The cipher in use (AdonisJS `Encryption.algorithm`).
|
|
46
46
|
*
|
|
47
|
-
* `aes-256-gcm`,
|
|
48
|
-
*
|
|
47
|
+
* `aes-256-gcm`, which is what upstream configures by default now; the CBC
|
|
48
|
+
* construction lives on there as the `legacy` driver. See the note at the top
|
|
49
|
+
* of this file for what that means for a cookie written by an older app.
|
|
49
50
|
*/
|
|
50
51
|
get algorithm(): 'aes-256-gcm';
|
|
51
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CookieSigner.d.ts","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,2EAA2E;AAC3E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;;CAK7C;AAED,gFAAgF;AAChF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAS;gBACjC,MAAM,SAAsC;CAIzD;AA8BD,qBAAa,YAAY;;gBAIX,MAAM,EAAE,MAAM;IAyD1B;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAMlE,iFAAiF;IACjF,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa9D
|
|
1
|
+
{"version":3,"file":"CookieSigner.d.ts","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,2EAA2E;AAC3E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;;CAK7C;AAED,gFAAgF;AAChF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAS;gBACjC,MAAM,SAAsC;CAIzD;AA8BD,qBAAa,YAAY;;gBAIX,MAAM,EAAE,MAAM;IAyD1B;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAMlE,iFAAiF;IACjF,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa9D;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,aAAa,CAE7B;IAED;;;;;;;OAOG;IACH,IAAI,MAAM,IAAI;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;QACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAChC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACxC,CAOA;IAED;;;;;;OAMG;IACH,IAAI,QAAQ,IAAI;QACd,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACpE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAA;KAChE,CAKA;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY;IAIpC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IASrE,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;CAyBnE"}
|
|
@@ -144,8 +144,9 @@ export class CookieSigner {
|
|
|
144
144
|
/**
|
|
145
145
|
* The cipher in use (AdonisJS `Encryption.algorithm`).
|
|
146
146
|
*
|
|
147
|
-
* `aes-256-gcm`,
|
|
148
|
-
*
|
|
147
|
+
* `aes-256-gcm`, which is what upstream configures by default now; the CBC
|
|
148
|
+
* construction lives on there as the `legacy` driver. See the note at the top
|
|
149
|
+
* of this file for what that means for a cookie written by an older app.
|
|
149
150
|
*/
|
|
150
151
|
get algorithm() {
|
|
151
152
|
return 'aes-256-gcm';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CookieSigner.js","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CookieSigner.js","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,2EAA2E;AAC3E,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,GAAG,mBAA4B,CAAA;IAC5C;QACE,KAAK,CAAC,yEAAyE,CAAC,CAAA;QAChF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,oBAA6B,CAAA;IAC7C,YAAY,MAAM,GAAG,mCAAmC;QACtD,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,yCAAyC;IACzC,WAAW;IACX,mBAAmB;IACnB,QAAQ;CACT,CAAC,CAAA;AAgBF,MAAM,OAAO,YAAY;IACvB,OAAO,CAAQ;IACf,UAAU,CAAQ;IAElB,YAAY,MAAc;QACxB,oEAAoE;QACpE,kEAAkE;QAClE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAA;QACpF,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;QACtD,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,kBAAkB,CAC1B,4FAA4F,CAC7F,CAAA;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,gEAAgE;QAChE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3F,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QACxD,MAAM,QAAQ,GAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;QACvC,IAAI,SAAS,KAAK,SAAS;YAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QAChE,IAAI,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAA;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAW,EAAE,OAAgB;QACjC,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC9D,MAAM,QAAQ,GAAG,MAAkB,CAAA;QACnC,2EAA2E;QAC3E,4EAA4E;QAC5E,sBAAsB;QACtB,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAA;QACnC,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QACtD,OAAO,QAAQ,CAAC,CAAC,CAAA;IACnB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1C,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,iFAAiF;IACjF,MAAM,CAAa,MAAc,EAAE,OAAgB;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACvD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAa,CAAA;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAI,SAAS;QACX,OAAO,aAAa,CAAA;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,MAAM;QAMR,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAClF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAiB,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9E,CAAC,CAAA;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IACjE,CAAC;IAED;;;;;;OAMG;IACH,IAAI,QAAQ;QAIV,OAAO;YACL,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;YAC7E,MAAM,EAAE,CAAI,OAAe,EAAE,OAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAI,OAAO,EAAE,OAAO,CAAC;SACnF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAe;QACnB,OAAO,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QAC1D,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAChF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC/B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAA;IACtG,CAAC;IAED,OAAO,CAAa,SAAiB,EAAE,OAAgB;QACrD,sEAAsE;QACtE,0EAA0E;QAC1E,2CAA2C;QAC3C,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC/D,IACE,MAAM,KAAK,SAAS;YACpB,QAAQ,KAAK,SAAS;YACtB,OAAO,KAAK,SAAS;YACrB,KAAK,KAAK,SAAS,EACnB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACrE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACrF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAa,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,27 +1,95 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Static file serving middleware.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* The shape is `@adonisjs/static`'s, whose own work is done by `serve-static`:
|
|
5
|
+
* the same option names, the same defaults, the same response headers. Ream
|
|
6
|
+
* cannot delegate to `serve-static` itself —
|
|
7
|
+
*
|
|
8
|
+
* NAMED DEVIATION (NAPI): `serve-static` writes to a Node `ServerResponse`, and
|
|
9
|
+
* Ream's response crosses the NAPI boundary as a complete object; there is no
|
|
10
|
+
* such object to hand it. So the BEHAVIOUR is reproduced here rather than the
|
|
11
|
+
* code, and every deviation from it below is deliberate and marked.
|
|
12
|
+
*
|
|
13
|
+
* One deviation is a deliberate improvement, kept per the rule that we do not
|
|
14
|
+
* give up safety for parity: the file is opened with `O_NOFOLLOW` and its
|
|
15
|
+
* metadata read from the descriptor, so the bytes served are the ones that
|
|
16
|
+
* passed the containment checks. `serve-static` re-reads by path.
|
|
5
17
|
*
|
|
6
18
|
* Usage:
|
|
7
|
-
* server.use(new StaticMiddleware({ root:
|
|
19
|
+
* server.use(new StaticMiddleware({ root: app.publicPath() }))
|
|
8
20
|
*
|
|
9
21
|
* @implements MISS-25
|
|
10
22
|
*/
|
|
23
|
+
import * as fs from 'node:fs';
|
|
11
24
|
import type { HttpContext } from '../http/HttpContext.js';
|
|
25
|
+
/** How a request for a dotfile is answered (`send`'s `dotfiles`). */
|
|
26
|
+
export type DotFilesPolicy = 'allow' | 'deny' | 'ignore';
|
|
12
27
|
export interface StaticConfig {
|
|
13
28
|
/** Root directory to serve files from. */
|
|
14
29
|
root: string;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
/**
|
|
30
|
+
/** Serve at all. `false` makes every request fall through. Default `true`. */
|
|
31
|
+
enabled?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Answer `Range` requests with `206`, and advertise `Accept-Ranges: bytes`.
|
|
34
|
+
* Default `true` — without it a browser cannot seek in audio or video, and
|
|
35
|
+
* an interrupted download restarts from zero.
|
|
36
|
+
*/
|
|
37
|
+
acceptRanges?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Emit `Cache-Control`. Default `true`. When `false`, `maxAge` and
|
|
40
|
+
* `immutable` are ignored, as upstream documents.
|
|
41
|
+
*/
|
|
42
|
+
cacheControl?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Dotfiles: `'ignore'` (fall through, the default), `'deny'` (403), or
|
|
45
|
+
* `'allow'` (serve). The default is why `.env` in the served root is not
|
|
46
|
+
* an accident waiting to happen.
|
|
47
|
+
*/
|
|
48
|
+
dotFiles?: DotFilesPolicy;
|
|
49
|
+
/** Emit `ETag` and honour `If-None-Match`. Default `true`. */
|
|
50
|
+
etag?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* FALLBACK extensions, NOT an allowlist: when the requested path has no
|
|
53
|
+
* file, try appending each of these. `['html']` makes `/about` serve
|
|
54
|
+
* `about.html`. Default: none.
|
|
55
|
+
*
|
|
56
|
+
* The name and meaning are upstream's. An earlier version of this file used
|
|
57
|
+
* the same option as an allowlist — the opposite meaning — which silently
|
|
58
|
+
* restricted the server for anyone porting an AdonisJS config across, and
|
|
59
|
+
* refused formats the framework itself produces (`.avif`, from prism).
|
|
60
|
+
*/
|
|
61
|
+
extensions?: string[] | false;
|
|
62
|
+
/** Add `immutable` to `Cache-Control`. Needs `maxAge`. Default `false`. */
|
|
63
|
+
immutable?: boolean;
|
|
64
|
+
/** Index file for a directory request. Default `'index.html'`; `false` disables. */
|
|
65
|
+
index?: string | string[] | false;
|
|
66
|
+
/** Emit `Last-Modified` and honour `If-Modified-Since`. Default `true`. */
|
|
67
|
+
lastModified?: boolean;
|
|
68
|
+
/** `Cache-Control: max-age`, in MILLISECONDS as upstream. Default `0`. */
|
|
18
69
|
maxAge?: number;
|
|
19
|
-
/**
|
|
20
|
-
|
|
70
|
+
/** Extra headers, per file. Runs last, so it can override the above. */
|
|
71
|
+
headers?: (filePath: string, stat: fs.Stats) => Record<string, string>;
|
|
72
|
+
/**
|
|
73
|
+
* Serve only under this URL prefix.
|
|
74
|
+
*
|
|
75
|
+
* NAMED DEVIATION: AdonisJS has no such option — its middleware is mounted at
|
|
76
|
+
* the URL root and falls through. Ream keeps it because the router is the
|
|
77
|
+
* same object the application writes to, and narrowing is occasionally what
|
|
78
|
+
* an application wants. The default is upstream's behaviour: no prefix.
|
|
79
|
+
*/
|
|
80
|
+
prefix?: string;
|
|
21
81
|
}
|
|
22
82
|
export declare class StaticMiddleware {
|
|
23
83
|
#private;
|
|
24
84
|
constructor(config: StaticConfig);
|
|
25
85
|
handle(ctx: HttpContext, next: () => Promise<void>): Promise<void>;
|
|
26
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Static config with the defaults filled in — `@adonisjs/static`'s
|
|
89
|
+
* `defineConfig`, value for value.
|
|
90
|
+
*
|
|
91
|
+
* // config/static.ts
|
|
92
|
+
* export default defineStaticConfig({ maxAge: 86_400_000 })
|
|
93
|
+
*/
|
|
94
|
+
export declare function defineStaticConfig(config?: Partial<StaticConfig>): Partial<StaticConfig>;
|
|
27
95
|
//# sourceMappingURL=StaticMiddleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAK7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAE7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,qBAAa,gBAAgB;;gBAef,MAAM,EAAE,YAAY;IAqB1B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CA0RzE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5F"}
|