@c9up/ream 0.1.32 → 0.1.33
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/dist/Application.d.ts +27 -0
- package/dist/Application.d.ts.map +1 -1
- package/dist/Application.js +29 -0
- package/dist/Application.js.map +1 -1
- package/dist/ErrorBoundary.d.ts.map +1 -1
- package/dist/ErrorBoundary.js +13 -1
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/HttpKernel.d.ts +8 -0
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +35 -12
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts +8 -0
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +39 -0
- package/dist/Ignitor.js.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.d.ts +11 -4
- package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.js +55 -43
- package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
- package/dist/bodyparser/qsParse.d.ts +52 -0
- package/dist/bodyparser/qsParse.d.ts.map +1 -0
- package/dist/bodyparser/qsParse.js +161 -0
- package/dist/bodyparser/qsParse.js.map +1 -0
- package/dist/bootstrap/hyper-server.d.ts.map +1 -1
- package/dist/bootstrap/hyper-server.js +2 -8
- package/dist/bootstrap/hyper-server.js.map +1 -1
- package/dist/container/Container.d.ts +41 -0
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +193 -26
- package/dist/container/Container.js.map +1 -1
- package/dist/container/ContainerResolver.d.ts +46 -0
- package/dist/container/ContainerResolver.d.ts.map +1 -0
- package/dist/container/ContainerResolver.js +60 -0
- package/dist/container/ContainerResolver.js.map +1 -0
- package/dist/container/ContextualBindingsBuilder.d.ts +20 -0
- package/dist/container/ContextualBindingsBuilder.d.ts.map +1 -0
- package/dist/container/ContextualBindingsBuilder.js +31 -0
- package/dist/container/ContextualBindingsBuilder.js.map +1 -0
- package/dist/container/types.d.ts +9 -6
- package/dist/container/types.d.ts.map +1 -1
- package/dist/decorators/Service.d.ts +1 -5
- package/dist/decorators/Service.d.ts.map +1 -1
- package/dist/decorators/Service.js +10 -1
- package/dist/decorators/Service.js.map +1 -1
- package/dist/events/Emitter.d.ts +66 -6
- package/dist/events/Emitter.d.ts.map +1 -1
- package/dist/events/Emitter.js +165 -28
- package/dist/events/Emitter.js.map +1 -1
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +5 -5
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/helpers/duration.d.ts +32 -0
- package/dist/helpers/duration.d.ts.map +1 -0
- package/dist/helpers/duration.js +74 -0
- package/dist/helpers/duration.js.map +1 -0
- package/dist/helpers/napi-loader.d.ts +10 -1
- package/dist/helpers/napi-loader.d.ts.map +1 -1
- package/dist/helpers/napi-loader.js +18 -3
- package/dist/helpers/napi-loader.js.map +1 -1
- package/dist/helpers/types.d.ts +1 -1
- package/dist/helpers/types.d.ts.map +1 -1
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +17 -5
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/HttpContext.d.ts +16 -5
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +4 -2
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts +48 -2
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +95 -14
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +128 -8
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +259 -8
- package/dist/http/Request.js.map +1 -1
- package/dist/http/Response.d.ts +74 -3
- package/dist/http/Response.d.ts.map +1 -1
- package/dist/http/Response.js +177 -4
- package/dist/http/Response.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/router/Router.d.ts +36 -7
- package/dist/router/Router.d.ts.map +1 -1
- package/dist/router/Router.js +66 -22
- package/dist/router/Router.js.map +1 -1
- package/dist/security/CookieSigner.d.ts +35 -4
- package/dist/security/CookieSigner.d.ts.map +1 -1
- package/dist/security/CookieSigner.js +99 -10
- package/dist/security/CookieSigner.js.map +1 -1
- package/dist/server/Server.d.ts +2 -3
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +30 -13
- package/dist/server/Server.js.map +1 -1
- package/dist/session/ReadOnlyValuesStore.d.ts +24 -0
- package/dist/session/ReadOnlyValuesStore.d.ts.map +1 -0
- package/dist/session/ReadOnlyValuesStore.js +45 -0
- package/dist/session/ReadOnlyValuesStore.js.map +1 -0
- package/dist/session/Session.d.ts +181 -9
- package/dist/session/Session.d.ts.map +1 -1
- package/dist/session/Session.js +284 -33
- package/dist/session/Session.js.map +1 -1
- package/dist/session/SessionMiddleware.d.ts.map +1 -1
- package/dist/session/SessionMiddleware.js +87 -33
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/session/drivers/DatabaseDriver.d.ts +66 -0
- package/dist/session/drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/session/drivers/DatabaseDriver.js +132 -0
- package/dist/session/drivers/DatabaseDriver.js.map +1 -0
- package/dist/session/drivers/FileDriver.d.ts +22 -0
- package/dist/session/drivers/FileDriver.d.ts.map +1 -0
- package/dist/session/drivers/FileDriver.js +66 -0
- package/dist/session/drivers/FileDriver.js.map +1 -0
- package/dist/session/drivers/MemoryDriver.d.ts +10 -2
- package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
- package/dist/session/drivers/MemoryDriver.js +70 -0
- package/dist/session/drivers/MemoryDriver.js.map +1 -1
- package/dist/session/drivers/RedisDriver.d.ts +10 -2
- package/dist/session/drivers/RedisDriver.d.ts.map +1 -1
- package/dist/session/drivers/RedisDriver.js +58 -0
- package/dist/session/drivers/RedisDriver.js.map +1 -1
- package/dist/session/templateTags.d.ts +42 -0
- package/dist/session/templateTags.d.ts.map +1 -0
- package/dist/session/templateTags.js +101 -0
- package/dist/session/templateTags.js.map +1 -0
- package/dist/testing/RequestBuilder.d.ts +38 -1
- package/dist/testing/RequestBuilder.d.ts.map +1 -1
- package/dist/testing/RequestBuilder.js +40 -1
- package/dist/testing/RequestBuilder.js.map +1 -1
- package/dist/testing/TestClient.d.ts +3 -1
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +3 -1
- package/dist/testing/TestClient.js.map +1 -1
- package/dist/types/helpers.d.ts +1 -1
- package/dist/types/helpers.d.ts.map +1 -1
- package/dist/utils/Macroable.d.ts +14 -5
- package/dist/utils/Macroable.d.ts.map +1 -1
- package/dist/utils/Macroable.js +20 -18
- package/dist/utils/Macroable.js.map +1 -1
- package/events.win32-x64-msvc.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/Application.ts +39 -0
- package/src/ErrorBoundary.ts +13 -1
- package/src/HttpKernel.ts +45 -19
- package/src/Ignitor.ts +39 -0
- package/src/bodyparser/BodyParserMiddleware.ts +66 -44
- package/src/bodyparser/qsParse.ts +179 -0
- package/src/bootstrap/hyper-server.ts +2 -9
- package/src/container/Container.ts +265 -25
- package/src/container/ContainerResolver.ts +84 -0
- package/src/container/ContextualBindingsBuilder.ts +41 -0
- package/src/container/types.ts +11 -7
- package/src/decorators/Service.ts +16 -3
- package/src/events/Emitter.ts +200 -25
- package/src/graphql/GraphQLEngine.ts +7 -8
- package/src/helpers/duration.ts +71 -0
- package/src/helpers/napi-loader.ts +19 -3
- package/src/helpers/types.ts +4 -1
- package/src/http/Exception.ts +17 -5
- package/src/http/HttpContext.ts +20 -5
- package/src/http/RedirectBuilder.ts +126 -11
- package/src/http/Request.ts +283 -13
- package/src/http/Response.ts +213 -6
- package/src/index.ts +17 -3
- package/src/router/Router.ts +98 -33
- package/src/security/CookieSigner.ts +102 -10
- package/src/server/Server.ts +36 -16
- package/src/session/ReadOnlyValuesStore.ts +52 -0
- package/src/session/Session.ts +364 -37
- package/src/session/SessionMiddleware.ts +93 -30
- package/src/session/drivers/DatabaseDriver.ts +184 -0
- package/src/session/drivers/FileDriver.ts +82 -0
- package/src/session/drivers/MemoryDriver.ts +75 -2
- package/src/session/drivers/RedisDriver.ts +77 -2
- package/src/session/templateTags.ts +124 -0
- package/src/testing/RequestBuilder.ts +76 -0
- package/src/testing/TestClient.ts +10 -2
- package/src/types/helpers.ts +4 -1
- package/src/utils/Macroable.ts +23 -8
- package/dist/utils/inflect.d.ts +0 -17
- package/dist/utils/inflect.d.ts.map +0 -1
- package/dist/utils/inflect.js +0 -32
- package/dist/utils/inflect.js.map +0 -1
- package/src/utils/inflect.ts +0 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyParserMiddleware.d.ts","sourceRoot":"","sources":["../../src/bodyparser/BodyParserMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"BodyParserMiddleware.d.ts","sourceRoot":"","sources":["../../src/bodyparser/BodyParserMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IACD,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB;;;;WAIG;QACH,yBAAyB,CAAC,EAAE,OAAO,CAAA;QACnC,qEAAqE;QACrE,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,2EAA2E;QAC3E,WAAW,CAAC,EAAE,cAAc,CAAA;KAC7B,CAAA;IACD,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IACD,SAAS,CAAC,EAAE;QACV,8EAA8E;QAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,wDAAwD;QACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;CACF;AAqCD,MAAM,CAAC,OAAO,OAAO,oBAAoB;;gBAG3B,MAAM,CAAC,EAAE,gBAAgB;IAU/B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAkGzD"}
|
|
@@ -7,24 +7,27 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { hydrateMultipartPayload } from './MultipartFile.js';
|
|
9
9
|
import { parseSize } from './parseSize.js';
|
|
10
|
+
import { parseQueryString } from './qsParse.js';
|
|
10
11
|
const DEFAULT_CONFIG = {
|
|
11
12
|
json: {
|
|
12
|
-
enabled: true,
|
|
13
13
|
limit: '1mb',
|
|
14
14
|
types: ['application/json', 'application/vnd.api+json'],
|
|
15
15
|
},
|
|
16
16
|
form: {
|
|
17
|
-
enabled: true,
|
|
18
17
|
limit: '1mb',
|
|
19
18
|
types: ['application/x-www-form-urlencoded'],
|
|
19
|
+
// AdonisJS ships both as `true` (define_config: form.convertEmptyStringsToNull
|
|
20
|
+
// / trimWhitespaces), so a migrated form behaves the same here.
|
|
21
|
+
convertEmptyStringsToNull: true,
|
|
22
|
+
trimWhitespaces: true,
|
|
23
|
+
queryString: {},
|
|
20
24
|
},
|
|
21
25
|
raw: {
|
|
22
|
-
|
|
26
|
+
// AdonisJS parses `text/*` out of the box (define_config: raw.types).
|
|
23
27
|
limit: '1mb',
|
|
24
|
-
types: ['text
|
|
28
|
+
types: ['text/*'],
|
|
25
29
|
},
|
|
26
30
|
multipart: {
|
|
27
|
-
enabled: true,
|
|
28
31
|
limit: '20mb',
|
|
29
32
|
maxFiles: 20,
|
|
30
33
|
maxFields: 500,
|
|
@@ -35,6 +38,7 @@ const DEFAULT_CONFIG = {
|
|
|
35
38
|
export default class BodyParserMiddleware {
|
|
36
39
|
#config;
|
|
37
40
|
constructor(config) {
|
|
41
|
+
assertNoEnabledFlag(config);
|
|
38
42
|
this.#config = {
|
|
39
43
|
json: { ...DEFAULT_CONFIG.json, ...config?.json },
|
|
40
44
|
form: { ...DEFAULT_CONFIG.form, ...config?.form },
|
|
@@ -53,23 +57,27 @@ export default class BodyParserMiddleware {
|
|
|
53
57
|
return;
|
|
54
58
|
}
|
|
55
59
|
// JSON
|
|
56
|
-
if (
|
|
57
|
-
// Request
|
|
60
|
+
if (matchesType(contentType, this.#config.json.types)) {
|
|
61
|
+
// `Request` lazy-parses JSON on first read; nothing to do here.
|
|
58
62
|
}
|
|
59
63
|
// Form URL-encoded
|
|
60
|
-
if (
|
|
61
|
-
ctx.request.setParsedBody(
|
|
64
|
+
if (matchesType(contentType, this.#config.form.types)) {
|
|
65
|
+
ctx.request.setParsedBody(parseQueryString(rawBody, {
|
|
66
|
+
...this.#config.form.queryString,
|
|
67
|
+
convertEmptyStringsToNull: this.#config.form.convertEmptyStringsToNull,
|
|
68
|
+
trimWhitespaces: this.#config.form.trimWhitespaces,
|
|
69
|
+
}));
|
|
62
70
|
}
|
|
63
71
|
// Raw text — wrap the string under `_body` so consumers can still
|
|
64
72
|
// reach it through `request.input('_body')`. This matches the fallback
|
|
65
73
|
// shape used by `Request.#ensureParsedBody` when JSON yields a non-object.
|
|
66
|
-
if (
|
|
74
|
+
if (matchesType(contentType, this.#config.raw.types)) {
|
|
67
75
|
ctx.request.setParsedBody({ _body: rawBody });
|
|
68
76
|
}
|
|
69
77
|
// Multipart — the Rust-side HyperServer parses the body server-side
|
|
70
78
|
// (multer crate) and ships the structured payload on `request.multipart`.
|
|
71
79
|
// JS just hydrates `MultipartFile` instances from the typed envelope.
|
|
72
|
-
if (
|
|
80
|
+
if (matchesType(contentType, this.#config.multipart.types)) {
|
|
73
81
|
const payload = ctx.request.multipart();
|
|
74
82
|
if (payload) {
|
|
75
83
|
if (this.#rejectMultipart(ctx, payload.files, payload.fields))
|
|
@@ -123,41 +131,45 @@ export default class BodyParserMiddleware {
|
|
|
123
131
|
return false;
|
|
124
132
|
}
|
|
125
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Whether a request's content-type is claimed by one of `types`.
|
|
136
|
+
*
|
|
137
|
+
* AdonisJS configures wildcards (`raw.types` defaults to `text/*`), so a bare
|
|
138
|
+
* substring test would never match `text/plain` against `text/*`. Parameters
|
|
139
|
+
* are stripped first: `application/json; charset=utf-8` is a JSON body.
|
|
140
|
+
*/
|
|
126
141
|
function matchesType(contentType, types) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
const eqIdx = pair.indexOf('=');
|
|
137
|
-
if (eqIdx === -1) {
|
|
138
|
-
result[decodeFormComponent(pair)] = '';
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
result[decodeFormComponent(pair.slice(0, eqIdx))] = decodeFormComponent(pair.slice(eqIdx + 1));
|
|
142
|
+
const actual = (contentType.split(';')[0] ?? '').trim().toLowerCase();
|
|
143
|
+
if (!actual)
|
|
144
|
+
return false;
|
|
145
|
+
return types.some((candidate) => {
|
|
146
|
+
const pattern = candidate.trim().toLowerCase();
|
|
147
|
+
if (pattern === '*/*')
|
|
148
|
+
return true;
|
|
149
|
+
if (pattern.endsWith('/*')) {
|
|
150
|
+
return actual.startsWith(`${pattern.slice(0, -1)}`);
|
|
142
151
|
}
|
|
143
|
-
|
|
144
|
-
|
|
152
|
+
return actual === pattern;
|
|
153
|
+
});
|
|
145
154
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
/**
|
|
156
|
+
* `enabled` was an atlas-era invention: AdonisJS has no such flag, and a parser
|
|
157
|
+
* is turned off by giving it no `types`. It also never worked for JSON, which
|
|
158
|
+
* `Request` lazy-parses on first read regardless.
|
|
159
|
+
*
|
|
160
|
+
* Silently ignoring a config key that used to mean something would re-enable a
|
|
161
|
+
* parser an app deliberately switched off, so it fails loudly with the
|
|
162
|
+
* replacement spelled out.
|
|
163
|
+
*/
|
|
164
|
+
function assertNoEnabledFlag(config) {
|
|
165
|
+
if (!config)
|
|
166
|
+
return;
|
|
167
|
+
for (const section of ['json', 'form', 'raw', 'multipart']) {
|
|
168
|
+
const value = config[section];
|
|
169
|
+
if (value !== null && typeof value === 'object' && 'enabled' in value) {
|
|
170
|
+
throw new Error(`[E_BODYPARSER_CONFIG] \`${section}.enabled\` is no longer supported — AdonisJS has no such option. ` +
|
|
171
|
+
`To disable this parser, give it no types: \`${section}: { types: [] }\`.`);
|
|
172
|
+
}
|
|
161
173
|
}
|
|
162
174
|
}
|
|
163
175
|
//# sourceMappingURL=BodyParserMiddleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyParserMiddleware.js","sourceRoot":"","sources":["../../src/bodyparser/BodyParserMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"BodyParserMiddleware.js","sourceRoot":"","sources":["../../src/bodyparser/BodyParserMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAA;AA2CpE,MAAM,cAAc,GAA6B;IAC/C,IAAI,EAAE;QACJ,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;KACxD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,mCAAmC,CAAC;QAC5C,+EAA+E;QAC/E,gEAAgE;QAChE,yBAAyB,EAAE,IAAI;QAC/B,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,EAAE;KAChB;IACD,GAAG,EAAE;QACH,sEAAsE;QACtE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,QAAQ,CAAC;KAClB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,qBAAqB,CAAC;KAC/B;CACF,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAA0B;IAEjC,YAAY,MAAyB;QACnC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;YACjD,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;YACjD,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;YAC9C,SAAS,EAAE,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE;SACjE,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAgB,EAAE,IAAyB;QACtD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QAEjC,aAAa;QACb,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,iCAAiC,EAAE;aAC1F,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,OAAO;QACP,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,gEAAgE;QAClE,CAAC;QAED,mBAAmB;QACnB,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,OAAO,CAAC,aAAa,CACvB,gBAAgB,CAAC,OAAO,EAAE;gBACxB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;gBAChC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB;gBACtE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe;aACnD,CAAC,CACH,CAAA;QACH,CAAC;QAED,kEAAkE;QAClE,uEAAuE;QACvE,2EAA2E;QAC3E,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/C,CAAC;QAED,oEAAoE;QACpE,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;oBAAE,OAAM;gBACrE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;gBAC1D,yEAAyE;gBACzE,oEAAoE;gBACpE,+DAA+D;gBAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBACzD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;gBACjC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,EAAE,CAAA;IACd,CAAC;IAED,SAAS,CAAC,WAAmB;QAC3B,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAA;QACrF,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAA;QACrF,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAA;QAC/F,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;IAC/B,CAAC;IAED,gGAAgG;IAChG,gBAAgB,CACd,GAAgB,EAChB,KAA8B,EAC9B,MAAsB;QAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAA;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAErC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;YAClC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE;oBACL,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,6BAA6B,GAAG,CAAC,SAAS,GAAG;iBACvD;aACF,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAChC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,GAAG,CAAC,QAAQ,GAAG,EAAE;aAC1F,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5D,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;YAC1B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,2BAA2B,EAAE;aACpF,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,WAAmB,EAAE,KAAe;IACvD,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACrE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9C,IAAI,OAAO,KAAK,KAAK;YAAE,OAAO,IAAI,CAAA;QAClC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,MAAM,KAAK,OAAO,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,MAAyB;IACpD,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,KAAK,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAU,EAAE,CAAC;QACpE,MAAM,KAAK,GAAY,MAAM,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CACb,2BAA2B,OAAO,mEAAmE;gBACnG,+CAA+C,OAAO,oBAAoB,CAC7E,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bracket-notation form parsing — what AdonisJS gets from `qs`.
|
|
3
|
+
*
|
|
4
|
+
* `@adonisjs/bodyparser` runs `qs.parse(body, options.qs)` on every
|
|
5
|
+
* `application/x-www-form-urlencoded` body, so `user[name]=ada` arrives as
|
|
6
|
+
* `{ user: { name: 'ada' } }` and a repeated `tags[]` becomes an array. Parsing
|
|
7
|
+
* flat instead does not merely lose the nesting: a repeated key OVERWRITES,
|
|
8
|
+
* so a multi-select or a checkbox group silently submits only its last value.
|
|
9
|
+
*
|
|
10
|
+
* Reimplemented rather than depending on `qs` — this package ships no runtime
|
|
11
|
+
* dependency it can write in a screenful, and the limits below are easier to
|
|
12
|
+
* defend when they are visible.
|
|
13
|
+
*
|
|
14
|
+
* Three guards, all of which `qs` also applies:
|
|
15
|
+
*
|
|
16
|
+
* - **Prototype keys are dropped.** `__proto__[x]=1` in a form body is the
|
|
17
|
+
* classic prototype-pollution vector; the key never reaches an object.
|
|
18
|
+
* - **Depth is capped** (`qs` defaults to 5). Beyond it the remainder is kept
|
|
19
|
+
* as a literal key rather than allocating unbounded nesting.
|
|
20
|
+
* - **Parameter count is capped** (`qs` defaults to 1000), so a body of a
|
|
21
|
+
* million `a[0]`, `a[1]`… cannot be turned into a million-entry object.
|
|
22
|
+
*/
|
|
23
|
+
/** `qs` defaults, reproduced so the behaviour is the same out of the box. */
|
|
24
|
+
export declare const DEFAULT_DEPTH = 5;
|
|
25
|
+
export declare const DEFAULT_PARAMETER_LIMIT = 1000;
|
|
26
|
+
export interface QsParseOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Treat `user.name` as `user[name]`. AdonisJS forces this ON for form
|
|
29
|
+
* bodies (`queryStringOptions.allowDots ??= true`), so a dotted field name
|
|
30
|
+
* nests there and must nest here.
|
|
31
|
+
*/
|
|
32
|
+
allowDots?: boolean;
|
|
33
|
+
depth?: number;
|
|
34
|
+
parameterLimit?: number;
|
|
35
|
+
/** Turn `''` into `null`, as AdonisJS' `convertEmptyStringsToNull` does. */
|
|
36
|
+
convertEmptyStringsToNull?: boolean;
|
|
37
|
+
/** Trim surrounding whitespace, as AdonisJS' `trimWhitespaces` does. */
|
|
38
|
+
trimWhitespaces?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `application/x-www-form-urlencoded` reserves `+` for space (RFC 1866 /
|
|
42
|
+
* WHATWG URL form spec), so the substitution happens BEFORE percent-decoding —
|
|
43
|
+
* otherwise a literal `+` (sent as `%2B`) would become a space too.
|
|
44
|
+
*
|
|
45
|
+
* Malformed percent-encoding makes `decodeURIComponent` throw; the
|
|
46
|
+
* substituted-but-undecoded value is kept so a bad body is a parse miss, not
|
|
47
|
+
* a 500.
|
|
48
|
+
*/
|
|
49
|
+
export declare function decodeFormComponent(value: string): string;
|
|
50
|
+
/** Parse a urlencoded body into a nested object. */
|
|
51
|
+
export declare function parseQueryString(body: string, options?: QsParseOptions): Record<string, unknown>;
|
|
52
|
+
//# sourceMappingURL=qsParse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qsParse.d.ts","sourceRoot":"","sources":["../../src/bodyparser/qsParse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,aAAa,IAAI,CAAA;AAC9B,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAE3C,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AA4FD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwBzB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bracket-notation form parsing — what AdonisJS gets from `qs`.
|
|
3
|
+
*
|
|
4
|
+
* `@adonisjs/bodyparser` runs `qs.parse(body, options.qs)` on every
|
|
5
|
+
* `application/x-www-form-urlencoded` body, so `user[name]=ada` arrives as
|
|
6
|
+
* `{ user: { name: 'ada' } }` and a repeated `tags[]` becomes an array. Parsing
|
|
7
|
+
* flat instead does not merely lose the nesting: a repeated key OVERWRITES,
|
|
8
|
+
* so a multi-select or a checkbox group silently submits only its last value.
|
|
9
|
+
*
|
|
10
|
+
* Reimplemented rather than depending on `qs` — this package ships no runtime
|
|
11
|
+
* dependency it can write in a screenful, and the limits below are easier to
|
|
12
|
+
* defend when they are visible.
|
|
13
|
+
*
|
|
14
|
+
* Three guards, all of which `qs` also applies:
|
|
15
|
+
*
|
|
16
|
+
* - **Prototype keys are dropped.** `__proto__[x]=1` in a form body is the
|
|
17
|
+
* classic prototype-pollution vector; the key never reaches an object.
|
|
18
|
+
* - **Depth is capped** (`qs` defaults to 5). Beyond it the remainder is kept
|
|
19
|
+
* as a literal key rather than allocating unbounded nesting.
|
|
20
|
+
* - **Parameter count is capped** (`qs` defaults to 1000), so a body of a
|
|
21
|
+
* million `a[0]`, `a[1]`… cannot be turned into a million-entry object.
|
|
22
|
+
*/
|
|
23
|
+
/** `qs` defaults, reproduced so the behaviour is the same out of the box. */
|
|
24
|
+
export const DEFAULT_DEPTH = 5;
|
|
25
|
+
export const DEFAULT_PARAMETER_LIMIT = 1000;
|
|
26
|
+
/** Keys that must never be written onto an object. */
|
|
27
|
+
const FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
28
|
+
/**
|
|
29
|
+
* Split `user[address][city]` into `['user', 'address', 'city']`, and
|
|
30
|
+
* `tags[]` into `['tags', '']` — an empty segment meaning "append".
|
|
31
|
+
* Segments past `depth` are folded back into one literal key, which is what
|
|
32
|
+
* `qs` does rather than erroring.
|
|
33
|
+
*/
|
|
34
|
+
function splitKey(key, depth, allowDots) {
|
|
35
|
+
// `user.name` → `user[name]` before anything else, so both spellings take
|
|
36
|
+
// the same path. AdonisJS forces allowDots on for form bodies.
|
|
37
|
+
const key2 = allowDots && !key.startsWith('.') ? key.replace(/\.([^.[\]]+)/g, '[$1]') : key;
|
|
38
|
+
const firstBracket = key2.indexOf('[');
|
|
39
|
+
if (firstBracket === -1)
|
|
40
|
+
return [key2];
|
|
41
|
+
const root = key2.slice(0, firstBracket);
|
|
42
|
+
const segments = [root];
|
|
43
|
+
let rest = key2.slice(firstBracket);
|
|
44
|
+
while (segments.length <= depth) {
|
|
45
|
+
const match = /^\[([^\]]*)\]/.exec(rest);
|
|
46
|
+
if (!match)
|
|
47
|
+
break;
|
|
48
|
+
segments.push(match[1] ?? '');
|
|
49
|
+
rest = rest.slice(match[0].length);
|
|
50
|
+
if (rest.length === 0)
|
|
51
|
+
return segments;
|
|
52
|
+
}
|
|
53
|
+
// Anything left over (too deep, or malformed) stays literal on the last
|
|
54
|
+
// segment — no value is dropped, it is just not nested any further.
|
|
55
|
+
if (rest.length > 0) {
|
|
56
|
+
segments[segments.length - 1] = `${segments[segments.length - 1] ?? ''}${rest}`;
|
|
57
|
+
}
|
|
58
|
+
return segments;
|
|
59
|
+
}
|
|
60
|
+
function isIndex(segment) {
|
|
61
|
+
return /^\d+$/.test(segment);
|
|
62
|
+
}
|
|
63
|
+
/** Assign `value` at `segments` inside `target`, creating containers as needed. */
|
|
64
|
+
function assign(target, segments, value) {
|
|
65
|
+
let cursor = target;
|
|
66
|
+
for (let i = 0; i < segments.length; i++) {
|
|
67
|
+
const segment = segments[i] ?? '';
|
|
68
|
+
const last = i === segments.length - 1;
|
|
69
|
+
if (FORBIDDEN_KEYS.has(segment))
|
|
70
|
+
return;
|
|
71
|
+
if (last) {
|
|
72
|
+
if (segment === '') {
|
|
73
|
+
// `tags[]` — append.
|
|
74
|
+
if (Array.isArray(cursor))
|
|
75
|
+
cursor.push(value);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(cursor)) {
|
|
79
|
+
if (isIndex(segment))
|
|
80
|
+
cursor[Number(segment)] = value;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const existing = cursor[segment];
|
|
84
|
+
if (existing === undefined) {
|
|
85
|
+
cursor[segment] = value;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// A key repeated WITHOUT brackets collects too, as `qs` does — losing
|
|
89
|
+
// the earlier value is the bug this whole file exists to fix.
|
|
90
|
+
if (Array.isArray(existing))
|
|
91
|
+
existing.push(value);
|
|
92
|
+
else
|
|
93
|
+
cursor[segment] = [existing, value];
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const nextSegment = segments[i + 1] ?? '';
|
|
97
|
+
const wantsArray = nextSegment === '' || isIndex(nextSegment);
|
|
98
|
+
if (Array.isArray(cursor)) {
|
|
99
|
+
if (!isIndex(segment))
|
|
100
|
+
return;
|
|
101
|
+
const index = Number(segment);
|
|
102
|
+
const existing = cursor[index];
|
|
103
|
+
if (existing === undefined || typeof existing !== 'object' || existing === null) {
|
|
104
|
+
cursor[index] = wantsArray ? [] : {};
|
|
105
|
+
}
|
|
106
|
+
cursor = cursor[index];
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const existing = cursor[segment];
|
|
110
|
+
if (existing === undefined || typeof existing !== 'object' || existing === null) {
|
|
111
|
+
cursor[segment] = wantsArray ? [] : {};
|
|
112
|
+
}
|
|
113
|
+
cursor = cursor[segment];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* `application/x-www-form-urlencoded` reserves `+` for space (RFC 1866 /
|
|
118
|
+
* WHATWG URL form spec), so the substitution happens BEFORE percent-decoding —
|
|
119
|
+
* otherwise a literal `+` (sent as `%2B`) would become a space too.
|
|
120
|
+
*
|
|
121
|
+
* Malformed percent-encoding makes `decodeURIComponent` throw; the
|
|
122
|
+
* substituted-but-undecoded value is kept so a bad body is a parse miss, not
|
|
123
|
+
* a 500.
|
|
124
|
+
*/
|
|
125
|
+
export function decodeFormComponent(value) {
|
|
126
|
+
const spaced = value.replace(/\+/g, ' ');
|
|
127
|
+
try {
|
|
128
|
+
return decodeURIComponent(spaced);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return spaced;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Parse a urlencoded body into a nested object. */
|
|
135
|
+
export function parseQueryString(body, options = {}) {
|
|
136
|
+
const depth = options.depth ?? DEFAULT_DEPTH;
|
|
137
|
+
const parameterLimit = options.parameterLimit ?? DEFAULT_PARAMETER_LIMIT;
|
|
138
|
+
const result = {};
|
|
139
|
+
if (!body)
|
|
140
|
+
return result;
|
|
141
|
+
const pairs = body.split('&');
|
|
142
|
+
let seen = 0;
|
|
143
|
+
for (const pair of pairs) {
|
|
144
|
+
if (!pair)
|
|
145
|
+
continue;
|
|
146
|
+
if (++seen > parameterLimit)
|
|
147
|
+
break;
|
|
148
|
+
const eqIdx = pair.indexOf('=');
|
|
149
|
+
const rawKey = eqIdx === -1 ? pair : pair.slice(0, eqIdx);
|
|
150
|
+
const rawValue = eqIdx === -1 ? '' : pair.slice(eqIdx + 1);
|
|
151
|
+
const key = decodeFormComponent(rawKey);
|
|
152
|
+
let value = decodeFormComponent(rawValue);
|
|
153
|
+
if (options.trimWhitespaces && typeof value === 'string')
|
|
154
|
+
value = value.trim();
|
|
155
|
+
if (options.convertEmptyStringsToNull && value === '')
|
|
156
|
+
value = null;
|
|
157
|
+
assign(result, splitKey(key, depth, options.allowDots ?? true), value);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=qsParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qsParse.js","sourceRoot":"","sources":["../../src/bodyparser/qsParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyper-server.d.ts","sourceRoot":"","sources":["../../src/bootstrap/hyper-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"hyper-server.d.ts","sourceRoot":"","sources":["../../src/bootstrap/hyper-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAmBpD;;;;GAIG;AACH,wBAAgB,wBAAwB,IACpC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,eAAe,CAAC,GAClD,SAAS,CAqBZ"}
|
|
@@ -21,13 +21,7 @@ import { createRequire } from 'node:module';
|
|
|
21
21
|
import { dirname, join } from 'node:path';
|
|
22
22
|
import { arch, platform } from 'node:process';
|
|
23
23
|
import { fileURLToPath } from 'node:url';
|
|
24
|
-
|
|
25
|
-
'linux-x64': 'linux-x64-gnu',
|
|
26
|
-
'linux-arm64': 'linux-arm64-gnu',
|
|
27
|
-
'darwin-x64': 'darwin-x64',
|
|
28
|
-
'darwin-arm64': 'darwin-arm64',
|
|
29
|
-
'win32-x64': 'win32-x64-msvc',
|
|
30
|
-
};
|
|
24
|
+
import { NAPI_PLATFORM_MAP } from '../helpers/napi-loader.js';
|
|
31
25
|
function isHyperServerNapi(value) {
|
|
32
26
|
return (typeof value === 'object' &&
|
|
33
27
|
value !== null &&
|
|
@@ -40,7 +34,7 @@ function isHyperServerNapi(value) {
|
|
|
40
34
|
* when no binary is available (unsupported platform / missing build).
|
|
41
35
|
*/
|
|
42
36
|
export function createHyperServerFactory() {
|
|
43
|
-
const suffix =
|
|
37
|
+
const suffix = NAPI_PLATFORM_MAP[`${platform}-${arch}`];
|
|
44
38
|
if (!suffix)
|
|
45
39
|
return undefined;
|
|
46
40
|
const require2 = createRequire(import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyper-server.js","sourceRoot":"","sources":["../../src/bootstrap/hyper-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"hyper-server.js","sourceRoot":"","sources":["../../src/bootstrap/hyper-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAW7D,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,aAAa,IAAI,KAAK;QACtB,OAAQ,KAAkC,CAAC,WAAW,KAAK,UAAU,CACtE,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IAGtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAA;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAE7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,yEAAyE;IACzE,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,MAAM,OAAO,CAAC,CAAA;IAEjE,IAAI,GAAY,CAAA;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAA;IAC5B,OAAO,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* @implements FR11, FR12, FR14, FR16
|
|
10
10
|
*/
|
|
11
11
|
import 'reflect-metadata';
|
|
12
|
+
import { ContainerResolver } from './ContainerResolver.js';
|
|
13
|
+
import { ContextualBindingsBuilder } from './ContextualBindingsBuilder.js';
|
|
12
14
|
import type { ServiceFactory, ServiceToken } from './types.js';
|
|
13
15
|
export declare class Container {
|
|
14
16
|
#private;
|
|
@@ -18,6 +20,21 @@ export declare class Container {
|
|
|
18
20
|
bind<_T>(token: ServiceToken, factory: ServiceFactory): void;
|
|
19
21
|
/** Bind an existing value directly. */
|
|
20
22
|
bindValue<T>(token: ServiceToken, value: T): void;
|
|
23
|
+
/**
|
|
24
|
+
* Give ONE class a different implementation of a dependency (AdonisJS
|
|
25
|
+
* `container.contextualBinding`).
|
|
26
|
+
*
|
|
27
|
+
* `contextualBinding(UsersController, Hash, () => new Argon2())` — everyone
|
|
28
|
+
* else asking for `Hash` still gets the container's binding. See
|
|
29
|
+
* {@link when} for the fluent spelling.
|
|
30
|
+
*/
|
|
31
|
+
contextualBinding(parent: new (...args: never[]) => unknown, binding: ServiceToken, factory: ServiceFactory): void;
|
|
32
|
+
/**
|
|
33
|
+
* Fluent contextual binding (AdonisJS `container.when`):
|
|
34
|
+
*
|
|
35
|
+
* container.when(UsersController).asksFor(Hash).provide(() => new Argon2())
|
|
36
|
+
*/
|
|
37
|
+
when(parent: new (...args: never[]) => unknown): ContextualBindingsBuilder;
|
|
21
38
|
/**
|
|
22
39
|
* Register an alias — resolving `alias` forwards to `target` (AdonisJS
|
|
23
40
|
* `container.alias('db', Database)`). The target may be a class, string, or
|
|
@@ -69,6 +86,30 @@ export declare class Container {
|
|
|
69
86
|
* Resolves method parameters from reflect-metadata and @inject().
|
|
70
87
|
*/
|
|
71
88
|
call<T, K extends string & keyof T>(instance: T, method: K, runtimeValues?: unknown[]): Promise<unknown>;
|
|
89
|
+
/**
|
|
90
|
+
* A resolver whose {@link ContainerResolver.bindValue} values are isolated
|
|
91
|
+
* from this container (AdonisJS `container.createResolver()`).
|
|
92
|
+
*
|
|
93
|
+
* Anything the resolver builds — and everything that build depends on — sees
|
|
94
|
+
* those values; nothing outside it does. This is how a request binds its own
|
|
95
|
+
* `HttpContext` without every other request seeing it.
|
|
96
|
+
*/
|
|
97
|
+
createResolver(): ContainerResolver;
|
|
98
|
+
/**
|
|
99
|
+
* @internal Run `fn` with `values` layered onto the resolution chain.
|
|
100
|
+
*
|
|
101
|
+
* Reuses an open chain rather than starting a second one, so cycle detection
|
|
102
|
+
* still spans the whole resolution when a resolver is used inside a factory.
|
|
103
|
+
*/
|
|
104
|
+
runWithScopedValues<T>(values: ReadonlyMap<string, unknown>, fn: () => Promise<T>): Promise<T>;
|
|
105
|
+
/** @internal Normalise a token the way the container keys it. */
|
|
106
|
+
keyFor(token: ServiceToken): string;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve `token` as if `parent` had asked for it, so `parent`'s contextual
|
|
109
|
+
* bindings apply (AdonisJS `resolveFor`). `parent: null` means nobody asked —
|
|
110
|
+
* identical to {@link make}.
|
|
111
|
+
*/
|
|
112
|
+
resolveFor<T>(parent: (new (...args: never[]) => unknown) | null, token: ServiceToken, runtimeValues?: unknown[]): Promise<T>;
|
|
72
113
|
/** Check if a token is registered or resolvable. */
|
|
73
114
|
has(token: ServiceToken): boolean;
|
|
74
115
|
/** True only when EVERY token is registered/resolvable (AdonisJS `hasAllBindings`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/container/Container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,kBAAkB,CAAA;AAUzB,OAAO,KAAK,EAAW,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/container/Container.ts"],"names":[],"mappings":"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"}
|