@balena/pinejs 21.4.0-build-add-odata-actions-0ee4bd11facc12101ac288c1d757c70f875ad658-1 → 21.4.0-build-add-odata-actions-20d3e91a876aef7fad5e838646c2714adbea38ea-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/.versionbot/CHANGELOG.yml +2 -2
- package/out/sbvr-api/actions.js +25 -19
- package/out/sbvr-api/actions.js.map +1 -1
- package/package.json +2 -2
- package/src/sbvr-api/actions.ts +34 -23
@@ -1,6 +1,6 @@
|
|
1
1
|
- commits:
|
2
2
|
- subject: Add support for defining odata actions
|
3
|
-
hash:
|
3
|
+
hash: 20d3e91a876aef7fad5e838646c2714adbea38ea
|
4
4
|
body: ""
|
5
5
|
footer:
|
6
6
|
See: https://balena.fibery.io/search/9OI72#Work/Improvement/Add-odata-actions-foundation-for-pinejs-2818
|
@@ -11,7 +11,7 @@
|
|
11
11
|
nested: []
|
12
12
|
version: 21.4.0
|
13
13
|
title: ""
|
14
|
-
date: 2025-05-
|
14
|
+
date: 2025-05-06T15:29:48.233Z
|
15
15
|
- commits:
|
16
16
|
- subject: Improve webresource tests to be independent of filename
|
17
17
|
hash: 1bd9e7250748b86aaccc54347add4b50ea3b335a
|
package/out/sbvr-api/actions.js
CHANGED
@@ -8,31 +8,37 @@ export const isActionRequest = (request) => {
|
|
8
8
|
request.odataQuery.property?.resource != null &&
|
9
9
|
actions[request.vocabulary]?.[request.resourceName]?.[request.odataQuery.property.resource] != null);
|
10
10
|
};
|
11
|
-
|
12
|
-
if (api[request.vocabulary] == null) {
|
13
|
-
throw new BadRequestError();
|
14
|
-
}
|
11
|
+
const runActionInTrasaction = async (request, req, tx) => {
|
15
12
|
const actionName = request.odataQuery.property.resource;
|
16
13
|
const action = actions[request.vocabulary]?.[request.resourceName]?.[actionName];
|
17
14
|
if (action == null) {
|
18
15
|
throw new BadRequestError();
|
19
16
|
}
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
passthrough: { tx, req },
|
27
|
-
});
|
28
|
-
return await action({
|
29
|
-
request,
|
30
|
-
tx,
|
31
|
-
api: applicationApi,
|
32
|
-
req,
|
33
|
-
id,
|
34
|
-
});
|
17
|
+
if (request.odataQuery.key == null) {
|
18
|
+
throw new BadRequestError('Unbound OData actions are not supported');
|
19
|
+
}
|
20
|
+
const id = await canRunAction(request, req, actionName, tx);
|
21
|
+
const applicationApi = api[request.vocabulary].clone({
|
22
|
+
passthrough: { tx, req },
|
35
23
|
});
|
24
|
+
return await action({
|
25
|
+
request,
|
26
|
+
tx,
|
27
|
+
api: applicationApi,
|
28
|
+
req,
|
29
|
+
id,
|
30
|
+
});
|
31
|
+
};
|
32
|
+
export const runAction = async (request, req) => {
|
33
|
+
if (api[request.vocabulary] == null) {
|
34
|
+
throw new BadRequestError();
|
35
|
+
}
|
36
|
+
return await (req.tx
|
37
|
+
? runActionInTrasaction(request, req, req.tx)
|
38
|
+
: sbvrUtils.db.transaction(async (tx) => {
|
39
|
+
req.tx = tx;
|
40
|
+
return await runActionInTrasaction(request, req, tx);
|
41
|
+
}));
|
36
42
|
};
|
37
43
|
export const addAction = (vocabulary, resourceName, actionName, action) => {
|
38
44
|
actions[vocabulary] ??= {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sbvr-api/actions.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,GAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,GAAG,EAAiB,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAuB1D,MAAM,OAAO,GAMT,EAAE,CAAC;AAEP,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,OAA2B,EACK,EAAE;IAGlC,OAAO,CACN,OAAO,CAAC,MAAM,KAAK,MAAM;QACzB,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC7C,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CACpD,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CACpC,IAAI,IAAI,CACT,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sbvr-api/actions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@balena/pinejs",
|
3
|
-
"version": "21.4.0-build-add-odata-actions-
|
3
|
+
"version": "21.4.0-build-add-odata-actions-20d3e91a876aef7fad5e838646c2714adbea38ea-1",
|
4
4
|
"main": "out/server-glue/module.js",
|
5
5
|
"type": "module",
|
6
6
|
"repository": "git@github.com:balena-io/pinejs.git",
|
@@ -149,6 +149,6 @@
|
|
149
149
|
"recursive": true
|
150
150
|
},
|
151
151
|
"versionist": {
|
152
|
-
"publishedAt": "2025-05-
|
152
|
+
"publishedAt": "2025-05-06T15:29:49.226Z"
|
153
153
|
}
|
154
154
|
}
|
package/src/sbvr-api/actions.ts
CHANGED
@@ -52,14 +52,11 @@ export const isActionRequest = (
|
|
52
52
|
);
|
53
53
|
};
|
54
54
|
|
55
|
-
|
55
|
+
const runActionInTrasaction = async (
|
56
56
|
request: ODataActionRequest,
|
57
57
|
req: ActionReq,
|
58
|
+
tx: Tx,
|
58
59
|
): Promise<Response> => {
|
59
|
-
if (api[request.vocabulary] == null) {
|
60
|
-
throw new BadRequestError();
|
61
|
-
}
|
62
|
-
|
63
60
|
const actionName = request.odataQuery.property.resource;
|
64
61
|
const action =
|
65
62
|
actions[request.vocabulary]?.[request.resourceName]?.[actionName];
|
@@ -67,27 +64,41 @@ export const runAction = async (
|
|
67
64
|
throw new BadRequestError();
|
68
65
|
}
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
id,
|
87
|
-
});
|
67
|
+
// in practice, the parser does not currently allow actions without a key
|
68
|
+
// so we keep it strict throwing in case this expectation is broken
|
69
|
+
if (request.odataQuery.key == null) {
|
70
|
+
throw new BadRequestError('Unbound OData actions are not supported');
|
71
|
+
}
|
72
|
+
const id = await canRunAction(request, req, actionName, tx);
|
73
|
+
const applicationApi = api[request.vocabulary].clone({
|
74
|
+
passthrough: { tx, req },
|
75
|
+
});
|
76
|
+
|
77
|
+
return await action({
|
78
|
+
request,
|
79
|
+
tx,
|
80
|
+
api: applicationApi,
|
81
|
+
req,
|
82
|
+
id,
|
88
83
|
});
|
89
84
|
};
|
90
85
|
|
86
|
+
export const runAction = async (
|
87
|
+
request: ODataActionRequest,
|
88
|
+
req: ActionReq,
|
89
|
+
) => {
|
90
|
+
if (api[request.vocabulary] == null) {
|
91
|
+
throw new BadRequestError();
|
92
|
+
}
|
93
|
+
|
94
|
+
return await (req.tx
|
95
|
+
? runActionInTrasaction(request, req, req.tx)
|
96
|
+
: sbvrUtils.db.transaction(async (tx) => {
|
97
|
+
req.tx = tx;
|
98
|
+
return await runActionInTrasaction(request, req, tx);
|
99
|
+
}));
|
100
|
+
};
|
101
|
+
|
91
102
|
export const addAction = <Vocab extends string>(
|
92
103
|
vocabulary: Vocab,
|
93
104
|
resourceName: string,
|