@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.
@@ -1,6 +1,6 @@
1
1
  - commits:
2
2
  - subject: Add support for defining odata actions
3
- hash: 0ee4bd11facc12101ac288c1d757c70f875ad658
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-06T14:09:23.075Z
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
@@ -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
- export const runAction = async (request, req) => {
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
- return await sbvrUtils.db.transaction(async (tx) => {
21
- if (request.odataQuery.key == null) {
22
- throw new BadRequestError('Unbound OData actions are not supported');
23
- }
24
- const id = await canRunAction(request, req, actionName, tx);
25
- const applicationApi = api[request.vocabulary].clone({
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":"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"}
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,qBAAqB,GAAG,KAAK,EAClC,OAA2B,EAC3B,GAAc,EACd,EAAM,EACc,EAAE;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxD,MAAM,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACnE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,EAAE,CAAC;IAC7B,CAAC;IAID,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;QACpD,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,MAAM,MAAM,CAAC;QACnB,OAAO;QACP,EAAE;QACF,GAAG,EAAE,cAAc;QACnB,GAAG;QACH,EAAE;KACF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC7B,OAA2B,EAC3B,GAAc,EACb,EAAE;IACH,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE;QACnB,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QAC7C,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACtC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACZ,OAAO,MAAM,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,UAAiB,EACjB,YAAoB,EACpB,UAAkB,EAClB,MAA0B,EACzB,EAAE;IACH,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,OAA2B,EAC3B,GAAc,EACd,UAAkB,EAClB,EAAM,EACL,EAAE;IACH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG;SAC9B,KAAK,CAAC,CAAC,CAAC;SACR,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CAAC,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;QACxC,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;QAC5B,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,iBAA4B,EAAW,EAAE;IACrE,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/pinejs",
3
- "version": "21.4.0-build-add-odata-actions-0ee4bd11facc12101ac288c1d757c70f875ad658-1",
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-06T14:09:24.311Z"
152
+ "publishedAt": "2025-05-06T15:29:49.226Z"
153
153
  }
154
154
  }
@@ -52,14 +52,11 @@ export const isActionRequest = (
52
52
  );
53
53
  };
54
54
 
55
- export const runAction = async (
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
- return await sbvrUtils.db.transaction(async (tx) => {
71
- // in practice, the parser does not currently allow actions without a key
72
- // so we keep it strict throwing in case this expectation is broken
73
- if (request.odataQuery.key == null) {
74
- throw new BadRequestError('Unbound OData actions are not supported');
75
- }
76
- const id = await canRunAction(request, req, actionName, tx);
77
- const applicationApi = api[request.vocabulary].clone({
78
- passthrough: { tx, req },
79
- });
80
-
81
- return await action({
82
- request,
83
- tx,
84
- api: applicationApi,
85
- req,
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,