@balena/open-balena-api 39.0.0-build-Limit-size-ofl-arge-fields-7951f883f39cef8c0d8943d62c6b7698f16f89f9-2 → 39.0.0-build-Limit-size-ofl-arge-fields-99b39061f0d36c98a2c05818ef71cd9da0d067a0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/field-size-limits/hooks.js +3 -3
- package/dist/features/field-size-limits/hooks.js.map +1 -1
- package/dist/features/field-size-limits/setup-field-size-limits.d.ts +5 -1
- package/dist/features/field-size-limits/setup-field-size-limits.js +12 -3
- package/dist/features/field-size-limits/setup-field-size-limits.js.map +1 -1
- package/package.json +2 -2
@@ -1,8 +1,8 @@
|
|
1
1
|
import { addHooksForFieldSizeLimitChecks } from './setup-field-size-limits.js';
|
2
2
|
for (const model of ['resin', 'Auth']) {
|
3
3
|
addHooksForFieldSizeLimitChecks(model, 'api_key', {
|
4
|
-
name: 50,
|
5
|
-
description: 150,
|
4
|
+
name: { max: 50, nullable: true },
|
5
|
+
description: { max: 150, nullable: true },
|
6
6
|
});
|
7
7
|
}
|
8
8
|
addHooksForFieldSizeLimitChecks('resin', 'organization', {
|
@@ -21,6 +21,6 @@ for (const resource of [
|
|
21
21
|
});
|
22
22
|
}
|
23
23
|
addHooksForFieldSizeLimitChecks('resin', 'device_tag', {
|
24
|
-
value:
|
24
|
+
value: { min: 0, max: 10_000 },
|
25
25
|
});
|
26
26
|
//# sourceMappingURL=hooks.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,+BAA+B,CAAC,KAAK,EAAE,SAAS,EAAE;QACjD,IAAI,EAAE,EAAE;
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,+BAA+B,CAAC,KAAK,EAAE,SAAS,EAAE;QACjD,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzC,CAAC,CAAC;AACJ,CAAC;AAED,+BAA+B,CAAC,OAAO,EAAE,cAAc,EAAE;IACxD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;CACX,CAAC,CAAC;AAEH,KAAK,MAAM,QAAQ,IAAI;IACtB,6BAA6B;IAC7B,kCAAkC;IAClC,wBAAwB;IACxB,6BAA6B;IAC7B,qCAAqC;CACrC,EAAE,CAAC;IACH,+BAA+B,CAAC,OAAO,EAAE,QAAQ,EAAE;QAClD,KAAK,EAAE,OAAO;KACd,CAAC,CAAC;AACJ,CAAC;AAED,+BAA+B,CAAC,OAAO,EAAE,YAAY,EAAE;IACtD,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE;CAC9B,CAAC,CAAC"}
|
@@ -1,4 +1,8 @@
|
|
1
1
|
/**
|
2
2
|
* This is a HACH and should only be used when pre-existing data blocks us from adding the respective Necessity directly in the sbvr.
|
3
3
|
*/
|
4
|
-
export declare function addHooksForFieldSizeLimitChecks(model: string, resource: string, fieldSizeLimits: Record<string, number |
|
4
|
+
export declare function addHooksForFieldSizeLimitChecks(model: string, resource: string, fieldSizeLimits: Record<string, number | {
|
5
|
+
min?: number;
|
6
|
+
max: number;
|
7
|
+
nullable?: boolean;
|
8
|
+
}>): void;
|
@@ -7,7 +7,15 @@ const vowels = ['a', 'e', 'i', 'o', 'u'];
|
|
7
7
|
* This is a HACH and should only be used when pre-existing data blocks us from adding the respective Necessity directly in the sbvr.
|
8
8
|
*/
|
9
9
|
export function addHooksForFieldSizeLimitChecks(model, resource, fieldSizeLimits) {
|
10
|
-
const fieldSizeLimitEntries = Object.entries(fieldSizeLimits)
|
10
|
+
const fieldSizeLimitEntries = Object.entries(fieldSizeLimits).map(([field, limits]) => {
|
11
|
+
if (limits != null && typeof limits === 'object') {
|
12
|
+
return [field, limits];
|
13
|
+
}
|
14
|
+
if (typeof limits === 'number') {
|
15
|
+
return [field, { max: limits }];
|
16
|
+
}
|
17
|
+
throw new Error(`Invalid field size limit for ${field}: ${limits}`);
|
18
|
+
});
|
11
19
|
const hook = {
|
12
20
|
POSTPARSE: ({ request }) => {
|
13
21
|
for (const [field, limits] of fieldSizeLimitEntries) {
|
@@ -15,7 +23,7 @@ export function addHooksForFieldSizeLimitChecks(model, resource, fieldSizeLimits
|
|
15
23
|
if (typeof value !== 'string') {
|
16
24
|
continue;
|
17
25
|
}
|
18
|
-
const
|
26
|
+
const { min, max, nullable } = limits;
|
19
27
|
if (value.length > max || (min != null && value.length <= min)) {
|
20
28
|
const [term, verb = 'has'] = odataNameToSqlName(field)
|
21
29
|
.split('-')
|
@@ -24,8 +32,9 @@ export function addHooksForFieldSizeLimitChecks(model, resource, fieldSizeLimits
|
|
24
32
|
// should improve one we find cases that this isn't returning the correct results.
|
25
33
|
const aOrAn = vowels.includes(term[0]) ? 'an' : 'a';
|
26
34
|
const factType = `${verb} ${aOrAn} ${term}`;
|
35
|
+
const thatHasFactType = nullable ? `that ${factType}, ` : '';
|
27
36
|
const isGreaterThanAnd = min != null ? `is greater than ${min} and ` : '';
|
28
|
-
throw new BadRequestError(`It is necessary that each ${odataNameToSqlName(resource)}
|
37
|
+
throw new BadRequestError(`It is necessary that each ${odataNameToSqlName(resource)} ${thatHasFactType}${factType} that has a Length (Type) that ${isGreaterThanAnd}is less than or equal to ${max}.`);
|
29
38
|
}
|
30
39
|
}
|
31
40
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"setup-field-size-limits.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/setup-field-size-limits.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC9C,KAAa,EACb,QAAgB,EAChB,
|
1
|
+
{"version":3,"file":"setup-field-size-limits.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/setup-field-size-limits.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC9C,KAAa,EACb,QAAgB,EAChB,eAGC;IAED,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAChE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAGd,EAAE;QACH,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC,CACD,CAAC;IACF,MAAM,IAAI,GAAoB;QAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC/B,SAAS;gBACV,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;oBAChE,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;yBACpD,KAAK,CAAC,GAAG,CAAC;yBACV,OAAO,EAAE,CAAC;oBACZ,iDAAiD;oBACjD,kFAAkF;oBAClF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBACpD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAC5C,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7D,MAAM,gBAAgB,GACrB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAElD,MAAM,IAAI,eAAe,CACxB,6BAA6B,kBAAkB,CAAC,QAAQ,CAAC,IAAI,eAAe,GAAG,QAAQ,kCAAkC,gBAAgB,4BAA4B,GAAG,GAAG,CAC3K,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,EAAE,CAAC;QACxD,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACF,CAAC"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@balena/open-balena-api",
|
3
3
|
"description": "Internet of things, Made Simple",
|
4
|
-
"version": "39.0.0-build-Limit-size-ofl-arge-fields-
|
4
|
+
"version": "39.0.0-build-Limit-size-ofl-arge-fields-99b39061f0d36c98a2c05818ef71cd9da0d067a0-1",
|
5
5
|
"license": "AGPL-3.0",
|
6
6
|
"repository": {
|
7
7
|
"type": "git",
|
@@ -174,6 +174,6 @@
|
|
174
174
|
"import": "@swc-node/register/esm-register"
|
175
175
|
},
|
176
176
|
"versionist": {
|
177
|
-
"publishedAt": "2025-07-
|
177
|
+
"publishedAt": "2025-07-15T08:00:44.503Z"
|
178
178
|
}
|
179
179
|
}
|