@balena/pinejs 20.0.2 → 20.0.3-build-compile-in-as-eq-any-bf6b98ce4d142cf629b97a4879fb0cfd285a07ea-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/.pinejs-cache.json +1 -1
- package/.versionbot/CHANGELOG.yml +21 -1
- package/CHANGELOG.md +6 -1
- package/VERSION +1 -1
- package/out/sbvr-api/abstract-sql.js +19 -9
- package/out/sbvr-api/abstract-sql.js.map +1 -1
- package/package.json +5 -5
- package/src/sbvr-api/abstract-sql.ts +28 -9
@@ -1,3 +1,15 @@
|
|
1
|
+
- commits:
|
2
|
+
- subject: Compile in as (= ANY($singleListBinding))
|
3
|
+
hash: bf6b98ce4d142cf629b97a4879fb0cfd285a07ea
|
4
|
+
body: ""
|
5
|
+
footer:
|
6
|
+
Change-type: patch
|
7
|
+
change-type: patch
|
8
|
+
author: Otavio Jacobi
|
9
|
+
nested: []
|
10
|
+
version: 20.0.3
|
11
|
+
title: ""
|
12
|
+
date: 2025-02-10T16:44:20.774Z
|
1
13
|
- commits:
|
2
14
|
- subject: "Migrations.md: Update the rollbackable migrations guide"
|
3
15
|
hash: 192216f3f07fa8637bc024bb634227d1b09b26d8
|
@@ -9,7 +21,7 @@
|
|
9
21
|
nested: []
|
10
22
|
version: 20.0.2
|
11
23
|
title: ""
|
12
|
-
date: 2025-02-
|
24
|
+
date: 2025-02-05T12:49:36.855Z
|
13
25
|
- commits:
|
14
26
|
- subject: Update postgres Docker tag to v17
|
15
27
|
hash: cfd7adeb986bad2fa6bfdf266ffd36c50c30a9f9
|
@@ -2202,6 +2214,7 @@
|
|
2202
2214
|
|
2203
2215
|
|
2204
2216
|
|
2217
|
+
|
2205
2218
|
|
2206
2219
|
|
2207
2220
|
As balena-lint
|
@@ -2250,6 +2263,7 @@
|
|
2250
2263
|
|
2251
2264
|
|
2252
2265
|
|
2266
|
+
|
2253
2267
|
|
2254
2268
|
|
2255
2269
|
As engine and npm is
|
@@ -2313,6 +2327,7 @@
|
|
2313
2327
|
|
2314
2328
|
|
2315
2329
|
|
2330
|
+
|
2316
2331
|
|
2317
2332
|
|
2318
2333
|
Ensure that the
|
@@ -2439,6 +2454,7 @@
|
|
2439
2454
|
|
2440
2455
|
|
2441
2456
|
|
2457
|
+
|
2442
2458
|
|
2443
2459
|
|
2444
2460
|
This also deprecates
|
@@ -2493,6 +2509,7 @@
|
|
2493
2509
|
|
2494
2510
|
|
2495
2511
|
|
2512
|
+
|
2496
2513
|
|
2497
2514
|
|
2498
2515
|
It can in fact be a
|
@@ -2548,6 +2565,7 @@
|
|
2548
2565
|
|
2549
2566
|
|
2550
2567
|
|
2568
|
+
|
2551
2569
|
|
2552
2570
|
|
2553
2571
|
We know what type
|
@@ -2608,6 +2626,7 @@
|
|
2608
2626
|
|
2609
2627
|
|
2610
2628
|
|
2629
|
+
|
2611
2630
|
|
2612
2631
|
|
2613
2632
|
Update
|
@@ -2779,6 +2798,7 @@
|
|
2779
2798
|
|
2780
2799
|
|
2781
2800
|
|
2801
|
+
|
2782
2802
|
|
2783
2803
|
|
2784
2804
|
This also deprecates
|
package/CHANGELOG.md
CHANGED
@@ -4,8 +4,13 @@ All notable changes to this project will be documented in this file
|
|
4
4
|
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
5
5
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
6
6
|
|
7
|
+
# v20.0.3
|
8
|
+
## (2025-02-10)
|
9
|
+
|
10
|
+
* Compile in as (= ANY($singleListBinding)) [Otavio Jacobi]
|
11
|
+
|
7
12
|
# v20.0.2
|
8
|
-
## (2025-02-
|
13
|
+
## (2025-02-05)
|
9
14
|
|
10
15
|
* Migrations.md: Update the rollbackable migrations guide [Thodoris Greasidis]
|
11
16
|
|
package/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
20.0.
|
1
|
+
20.0.3
|
@@ -46,7 +46,7 @@ export const getAndCheckBindValues = async (request, bindings) => {
|
|
46
46
|
const sqlModelTables = sbvrUtils.getAbstractSqlModel(request).tables;
|
47
47
|
return await Promise.all(bindings.map(async (binding) => {
|
48
48
|
let fieldName = '';
|
49
|
-
let
|
49
|
+
let dataType;
|
50
50
|
let value;
|
51
51
|
if (binding[0] === 'Bind') {
|
52
52
|
const bindValue = binding[1];
|
@@ -66,46 +66,56 @@ export const getAndCheckBindValues = async (request, bindings) => {
|
|
66
66
|
if (maybeField == null) {
|
67
67
|
throw new Error(`Could not find field '${fieldName}'`);
|
68
68
|
}
|
69
|
-
|
69
|
+
dataType = maybeField.dataType;
|
70
70
|
}
|
71
71
|
else if (Number.isInteger(bindValue)) {
|
72
72
|
if (bindValue >= odataBinds.length) {
|
73
73
|
console.error(`Invalid binding number '${bindValue}' for binds: `, odataBinds);
|
74
74
|
throw new Error('Invalid binding');
|
75
75
|
}
|
76
|
-
let dataType;
|
77
76
|
[dataType, value] = odataBinds[bindValue];
|
78
|
-
field = { dataType };
|
79
77
|
}
|
80
78
|
else if (typeof bindValue === 'string') {
|
81
79
|
if (!Object.hasOwn(odataBinds, bindValue)) {
|
82
80
|
console.error(`Invalid binding '${bindValue}' for binds: `, odataBinds);
|
83
81
|
throw new Error('Invalid binding');
|
84
82
|
}
|
85
|
-
let dataType;
|
86
83
|
[dataType, value] = odataBinds[bindValue];
|
87
|
-
field = { dataType };
|
88
84
|
}
|
89
85
|
else {
|
90
86
|
throw new Error(`Unknown binding: ${binding}`);
|
91
87
|
}
|
92
88
|
}
|
93
89
|
else {
|
94
|
-
let dataType;
|
95
90
|
[dataType, value] = binding;
|
96
|
-
field = { dataType };
|
97
91
|
}
|
98
92
|
if (value === undefined) {
|
99
93
|
throw new Error(`Bind value cannot be undefined: ${binding}`);
|
100
94
|
}
|
101
95
|
try {
|
102
|
-
return await
|
96
|
+
return await validateBindingType(engine, value, dataType);
|
103
97
|
}
|
104
98
|
catch (err) {
|
105
99
|
throw new BadRequestError(`"${fieldName}" ${err.message}`);
|
106
100
|
}
|
107
101
|
}));
|
108
102
|
};
|
103
|
+
const validateBindingType = async (engine, $value, $dataType) => {
|
104
|
+
if ($dataType === 'List') {
|
105
|
+
if (!Array.isArray($value)) {
|
106
|
+
throw new Error('List value binding must be an array');
|
107
|
+
}
|
108
|
+
return await Promise.all($value.map(async ([dataType, value]) => {
|
109
|
+
if (dataType === 'Null') {
|
110
|
+
return null;
|
111
|
+
}
|
112
|
+
return await validateBindingType(engine, value, dataType);
|
113
|
+
}));
|
114
|
+
}
|
115
|
+
return await AbstractSQLCompiler[engine].dataTypeValidate($value, {
|
116
|
+
dataType: $dataType,
|
117
|
+
});
|
118
|
+
};
|
109
119
|
const checkModifiedFields = (ruleReferencedFields, modifiedFields) => {
|
110
120
|
const refs = ruleReferencedFields[modifiedFields.table];
|
111
121
|
if (refs == null) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"abstract-sql.js","sourceRoot":"","sources":["../../src/sbvr-api/abstract-sql.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"abstract-sql.js","sourceRoot":"","sources":["../../src/sbvr-api/abstract-sql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@balena/pinejs",
|
3
|
-
"version": "20.0.
|
3
|
+
"version": "20.0.3-build-compile-in-as-eq-any-bf6b98ce4d142cf629b97a4879fb0cfd285a07ea-1",
|
4
4
|
"main": "out/server-glue/module.js",
|
5
5
|
"type": "module",
|
6
6
|
"repository": "git@github.com:balena-io/pinejs.git",
|
@@ -26,12 +26,12 @@
|
|
26
26
|
"generate-types": "node ./bin/sbvr-compiler.js generate-types ./src/sbvr-api/user.sbvr ./src/sbvr-api/user.ts && node ./bin/sbvr-compiler.js generate-types ./src/migrator/migrations.sbvr ./src/migrator/migrations.ts && node ./bin/sbvr-compiler.js generate-types ./src/sbvr-api/dev.sbvr ./src/sbvr-api/dev.ts && node ./bin/sbvr-compiler.js generate-types ./src/tasks/tasks.sbvr ./src/tasks/tasks.ts && balena-lint -t tsconfig.dev.json --fix ./src/sbvr-api/user.ts ./src/migrator/migrations.ts ./src/sbvr-api/dev.ts"
|
27
27
|
},
|
28
28
|
"dependencies": {
|
29
|
-
"@balena/abstract-sql-compiler": "^10.
|
29
|
+
"@balena/abstract-sql-compiler": "^10.2.0",
|
30
30
|
"@balena/abstract-sql-to-typescript": "^5.1.0",
|
31
31
|
"@balena/env-parsing": "^1.2.0",
|
32
32
|
"@balena/lf-to-abstract-sql": "^5.0.3",
|
33
|
-
"@balena/odata-parser": "
|
34
|
-
"@balena/odata-to-abstract-sql": "
|
33
|
+
"@balena/odata-parser": "4.1.0-build-bind-null-ce0338116f41852351d253539f3630e085d095e0-1",
|
34
|
+
"@balena/odata-to-abstract-sql": "7.1.0-build-parse-in-as-eq-any-4aa0c4bd381470cf6d748ac49182ef0df0989987-1",
|
35
35
|
"@balena/sbvr-parser": "^1.4.6",
|
36
36
|
"@balena/sbvr-types": "^9.1.0",
|
37
37
|
"@types/body-parser": "^1.19.5",
|
@@ -148,6 +148,6 @@
|
|
148
148
|
"recursive": true
|
149
149
|
},
|
150
150
|
"versionist": {
|
151
|
-
"publishedAt": "2025-02-
|
151
|
+
"publishedAt": "2025-02-10T16:44:21.703Z"
|
152
152
|
}
|
153
153
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import _ from 'lodash';
|
2
2
|
|
3
|
+
import type { Engines } from '@balena/abstract-sql-compiler';
|
3
4
|
import AbstractSQLCompiler from '@balena/abstract-sql-compiler';
|
4
5
|
import type { BindKey } from '@balena/odata-parser';
|
5
6
|
import {
|
@@ -78,7 +79,7 @@ export const getAndCheckBindValues = async (
|
|
78
79
|
return await Promise.all(
|
79
80
|
bindings.map(async (binding) => {
|
80
81
|
let fieldName = '';
|
81
|
-
let
|
82
|
+
let dataType: string;
|
82
83
|
let value: any;
|
83
84
|
if (binding[0] === 'Bind') {
|
84
85
|
const bindValue = binding[1];
|
@@ -103,7 +104,7 @@ export const getAndCheckBindValues = async (
|
|
103
104
|
if (maybeField == null) {
|
104
105
|
throw new Error(`Could not find field '${fieldName}'`);
|
105
106
|
}
|
106
|
-
|
107
|
+
dataType = maybeField.dataType;
|
107
108
|
} else if (Number.isInteger(bindValue)) {
|
108
109
|
if (bindValue >= odataBinds.length) {
|
109
110
|
console.error(
|
@@ -112,9 +113,7 @@ export const getAndCheckBindValues = async (
|
|
112
113
|
);
|
113
114
|
throw new Error('Invalid binding');
|
114
115
|
}
|
115
|
-
let dataType;
|
116
116
|
[dataType, value] = odataBinds[bindValue];
|
117
|
-
field = { dataType };
|
118
117
|
} else if (typeof bindValue === 'string') {
|
119
118
|
if (!Object.hasOwn(odataBinds, bindValue)) {
|
120
119
|
console.error(
|
@@ -123,16 +122,12 @@ export const getAndCheckBindValues = async (
|
|
123
122
|
);
|
124
123
|
throw new Error('Invalid binding');
|
125
124
|
}
|
126
|
-
let dataType;
|
127
125
|
[dataType, value] = odataBinds[bindValue as BindKey];
|
128
|
-
field = { dataType };
|
129
126
|
} else {
|
130
127
|
throw new Error(`Unknown binding: ${binding}`);
|
131
128
|
}
|
132
129
|
} else {
|
133
|
-
let dataType;
|
134
130
|
[dataType, value] = binding;
|
135
|
-
field = { dataType };
|
136
131
|
}
|
137
132
|
|
138
133
|
if (value === undefined) {
|
@@ -140,7 +135,7 @@ export const getAndCheckBindValues = async (
|
|
140
135
|
}
|
141
136
|
|
142
137
|
try {
|
143
|
-
return await
|
138
|
+
return await validateBindingType(engine, value, dataType);
|
144
139
|
} catch (err: any) {
|
145
140
|
throw new BadRequestError(`"${fieldName}" ${err.message}`);
|
146
141
|
}
|
@@ -148,6 +143,30 @@ export const getAndCheckBindValues = async (
|
|
148
143
|
);
|
149
144
|
};
|
150
145
|
|
146
|
+
const validateBindingType = async (
|
147
|
+
engine: Engines,
|
148
|
+
$value: any,
|
149
|
+
$dataType: string,
|
150
|
+
): Promise<any> => {
|
151
|
+
if ($dataType === 'List') {
|
152
|
+
if (!Array.isArray($value)) {
|
153
|
+
throw new Error('List value binding must be an array');
|
154
|
+
}
|
155
|
+
return await Promise.all(
|
156
|
+
$value.map(async ([dataType, value]: [string, any]) => {
|
157
|
+
// Null is a special case for list values
|
158
|
+
if (dataType === 'Null') {
|
159
|
+
return null;
|
160
|
+
}
|
161
|
+
return await validateBindingType(engine, value, dataType);
|
162
|
+
}),
|
163
|
+
);
|
164
|
+
}
|
165
|
+
return await AbstractSQLCompiler[engine].dataTypeValidate($value, {
|
166
|
+
dataType: $dataType,
|
167
|
+
});
|
168
|
+
};
|
169
|
+
|
151
170
|
const checkModifiedFields = (
|
152
171
|
ruleReferencedFields: AbstractSQLCompiler.RuleReferencedFields,
|
153
172
|
modifiedFields: AbstractSQLCompiler.ModifiedFields,
|